C++和JAVA关于i++执行结果不同的问题

本文通过Java和C++代码示例对比分析了i=i++与i=++i的操作顺序及结果差异,揭示了这两种表达式在不同编程语言中的行为特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看网页的时候看到一个关于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是先自增,再入栈,再出栈,这个时候得出的也是入栈的值,但是自增的结果保留了。

转载于:https://www.cnblogs.com/charlexu/archive/2013/04/18/3029185.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值