C++和JAVA关于i++执行结果不同的问题
今天看网页的时候看到一个关于i=i++的问题。
public void testNum(){ int j=2; j=j++; System.out.println("j=" + j); j=++j; System.out.println("j=" + j); }
分别在eclipse和vs中执行得到结果:
在java中得出的结果是:j=2 j=3;
而在C++中得出的结果是:j=3 j=3;
后来在网上找了下结果,给了我一些启发。进入dos,定位到class的目录,输入“javap -c class的名称”
得到的结果是
考虑到优先级的关系。大概是:
0: iconst_2 就是把常量2压栈,这里做的是int j=2里的2;
1: istore_1 出栈到变量1(也就是j),此时栈为空。这时做的是int j=2里的=。
2: iload_1 变量1入栈,做的是j++的j的值入栈。
3: iinc 1,1 变量1自增,做的是++。此时j=3。
6: istore_1 出栈到变量1(也就是j),此时栈为空。这里做的是j=j++里的=。
下面的是j=++j
29: iinc 1,1 变量1自增,做的是++。此时j=3
32:iload_1 变量1入栈,做的是++j的j的值入栈。
33: istore_1 出栈到变量1(也就是j),此时栈为空。这里做的是j=++j里的=。
从上面两个解释来看j++和++j最大的区别是顺序不同。j++是先入栈,后自增,再出栈,最后得出的结果是入栈的值,自增的结果最后被覆盖了;++j是先自增,再入栈,再出栈,这个时候得出的也是入栈的值,但是自增的结果保留了。