++i 和 i++ 哪个更高效?

在内建数据类型的情况下,效率没有区别;
在自定义数据类型的情况下,++i效率更高!
分析1:
(在自定义数据类型的情况下)
++i返回对象的引用;
i++ 总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。
分析2:
i++由于是在使用当前值之后再 +1, 所以需要一个临时变量来转储,而++i 则直接 +1,不存在临时变量的问题。
测试:
【Java code:】
public class Main{
    public static void main(String[] args){
        int i = 0;
        i++;
        ++i;
    }
}
 
 
[Compiled from "Main.java"]
public class Main extends java.lang.Object{
public Main();
  Code:
   0: aload_0
   1: invokespecial #1; //Method java/lang/Object."<init>":()V
   4: return
 
public static void main(java.lang.String[]);
  Code:
   0: iconst_0
   1: istore_1
   2: iinc 1, 1
   5: iinc 1, 1
   8: return
}
2: iinc 1, 1 ;这个是i++
5: iinc 1, 1 ;这个是++i
 
扩展:i=i+1,  i+=1,  i++, ++i 效率比较
++i 最快
i++ 次之,比++i多用一个临时变量
i += 1 第三,需要取地址
i = i + 1 最后,并多用一个临时变量
=============

(1) x = x + 1 它的效率最低,因为其执行过程如下:
    1-1     读取右x的地址;
    1-2     x + 1;
    1-3     读取左x的地址;
    1-4     将右值传给左边的x

(2) x += 1; 他的执行过程是:
    2-1     读取右x的地址;
    2-2     x + 1;
    2-3     将得到的值传给x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值