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是先自增,再入栈,再出栈,这个时候得出的也是入栈的值,但是自增的结果保留了。

posted @ 2013-04-18 18:17  三句对白  阅读(591)  评论(0编辑  收藏  举报