a++:a先创建自身的一个副本,然后a自增1,最后返回副本的值。
例子:
a=3;
b=a++;
运行后
b=3,a=4
++a:将a自增1并返回a。
a=3;
b=++a;
运行后
b=4,a=4
效率问题:
1.在内建数据类型时(即自增表示式的结果没有被使用,只是简单的用于递增操作),这时这两个表达式的效率是相同的。
2.在自定义数据类型时(主要指有类的情况),由于++a可以返回对象的引用,而a++一定要是返回对象的值(因为局部对象不能返回引用)。可想而知引用的开销当然比直接对对象进行操作要效率高很多,节省很多开销。
前置++和后置++存在本质上的区别:
前置++ 不会产生临时对象
后置++ 在返回时有一个临时对象的创建
在前置++和后置++ 效果相同的时候,最好使用前置++
a++是先办事(进行相关运行),后给钱(然后再将a加1)
++a是先给钱(先给a加1),后办事(然后参与运算)
关于更详细的分析,大家可以参考我所写的百度经验。里面基于反汇编的代码,分析了两者的差别,相信你看过后会明白的。
jingyan.baidu.com/article/9f63fb919997f3c8400f0efb.html