对这个问题的探讨来自昨天网易的一道笔试题 考点1:i++和++i
package algorithms.com.guan.javajicu; public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); i= i ++; System.out.println(i); } void fermin(int i){ i++; } }输出结果为0!(惊不惊喜,意不意外)
忘了之前在哪看到了下面的描述:
i++:先赋值,后加1; ++i:先加1,后赋值。没搞懂的我默默背下来并当做了一个模板。
情景一:b=i++
public class Test { public static void main(String args[]) { int i = 0; int b = i++; System.out.println(b); System.out.println(i); } }套个模板: 先赋值,b=0;后加1,i=1。 代码一跑没毛病。
情景二:b=++i
public class Test { public static void main(String args[]) { int i = 0; int b = ++i; System.out.println(b); System.out.println(i); } }再套下: 先加1,i=1;后赋值,b=1。 代码一跑没毛病。
情景三:i=i++ 套个模板来,i=i++; 先赋值,后加1→先是i=0后是i=1。 满心欢喜:”输出i是1!”
public class Test { public static void main(String args[]) { int i = 0; i= i++; System.out.println(i); } }代码一跑,结果是0。 模板错了吗??
情景四:i=++i
public class Test { public static void main(String args[]) { int i = 0; i= ++i; System.out.println(i); } }不知道对不对,再套一下: 先加1,后赋值,i=1。 代码一跑没毛病。 咋到了i=i++就不好使了呢?
在网上一番扒拉,得出结论是: 1、单纯看i++和++i,++在前或者在后没有区别,结果都是i+1
public class Test { public static void main(String args[]) { int i = 0; i++; System.out.println(i); } } public class Test { public static void main(String args[]) { int i = 0; ++i; System.out.println(i); } }输出的都是1。
2、区别在赋值,也就是“=”上;
i++,左边符号遇到“=”赋值为i自增前的值;++i,左边符号遇到“=”赋值为i自增后的值。原因就是i++运用了中间变量缓存机制,而++i没有 参考链接:https://my.oschina.net/u/3568600/blog/1794573/ i++ 有中间缓存变量, i = i++ 等价于
temp = i; i = i + 1; i = temp;
再次分析上面四个情景:
b=i++;b遇到“=”赋值i为自增前的值0 ;b=++i;b遇到“=”赋值i为自增后的值1;i=i++;i遇到“=”赋值为i自增前的值0 ;i=++i;i遇到“=”赋值为i自增后的值1;以上是个人理解,如有误请大家指正,感谢!