++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

猜你喜欢

转载自fdd.iteye.com/blog/2202667