【Java】i++与++i的不同,从底层和效率上比较

以前书本、视频和网站上但到i++和++i的区别,都是简单,两句话。

i++,先运算,后赋值
++i,先赋值,后运算

举个例子:(Java语言)

int i = 1;
System.out.print(i++);
int j = 1;//为了明显区分,这里再声明一个j
System.out.print(++j);

答案分别是1和2;

i++和++i不能查源码,我可能一辈子就死记住谁先赋值谁先运算这两句话。

一次偶然的机会,公司的同事问我,你知道i++和++i的有什么不同吗。我说这不简单嘛,就两句话。他接着问,它俩谁的效率更高。我说,不都一样嘛。他笑着摇摇头,然后在纸上写了两句话。

i++:Fetch i,copy i,increment i,return copy;
++i:Fetch i,increment i,return i;

后来我才知道Fetch是取出的意思,不过这不影响我明白这两句话的意思。

i++:取出i,复制i,增加i,返回副本;
++i:取出i,增加i,返回i;

i++要增加一个副本,无疑是要多耗内存,当然效率要低一点,当然只是一丢丢罢了,根本不会对程序运行有明显的影响。

我们现在在使用i++和++i时根本不会考虑性能和效率,只会考虑运算的时候会不会先加1。

今天写点这,只是觉得一些底层的东西还是挺有意思的,拿出来给大家分享。


20190430更新

我来推翻我的结论了,因为有高人在评论区里给我指正了,我亲自测试了一下,结论被打脸了,以下为高人评论:

qq_28692805: 对于java是没有区别的 他们的byte code 是一样的 都是 iinc。对于C语言 你说的是对的。bytecode 可以用javap -c classfile看。i=i+1, i++, ++1。 bytecode都是一样的。

下图为我做的实验:

对比图
从两个图的对比来看,完全一样。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值