在内建数据类型的情况下,效率没有区别;
在自定义数据类型的情况下,++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 最后,并多用一个临时变量
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