java i 和i,详解Java中i++和++i的区别
i++ :先赋值再自增
先在i所在的表达式中使用i的当前值,后让i加1
++i :先自增再赋值
让i先加1,然后在i所在的表达式中使用i的新值
以下列java代码为例:
运算结果为:
这表明: i++是指先把i=0的值赋值给j, 然后再自身加1;
对于++i:
运算结果为:
表明++i是指先自身加1后赋值给z;
还要注意二者的以下使用不同:
// 测试三
i = 0;
i++;
i++;
i++;
i++;
i++;
System.out.println("i=" + i);
// 测试四
i = 0;
i = i++;
i = i++;
i = i++;
i = i++;
i = i++;
System.out.println("i=" + i);
测试结果为:
后面一种写法结果为零,是因为i 先执行 i=i=0,之后才会自加
但五个i=i++, 是赋值之后再自增1,i=0这个值先进寄存器,然后i在内存自增1,
最后赋值的时候寄存器出来的0值会冲掉1值成为最终结果,所以无论多少个结果都会是0。
而++i不会有这种问题
在一些视频教程里面写for循环的时候都是写 ++i 而不是 i++,因为这涉及到效率问题
++i相当于下列代码
i += 1;
return i;
i++相当于下列代码
j = i;
i += 1;
return j;
当然如果编译器会将这些差别都优化掉,那么效率就都差不多了。
在Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值放进去,不用了才去释放。
多了这么一系列操作当然耗时,最后建议大家以后在写for循环且不影响逻辑的情况下多使用++i,少使用i++,