先看一個例子:
package com.test; public class AutoIncrement { public static void main(String[] args) { int a=7; System.out.println(++a); System.out.println(a); int b=7; System.out.println(b++); System.out.println(b); } }
結果也如預期的一樣:
是不是回憶起大學老師講的規則:自增有兩種方式,分別是i++和++i;i++表示先賦值后加1;++i表示先加1再賦值;
那還有啥好講的?(**上面的規則是片面的**)
那下來咱們看一個例子:
package com.test; public class AutoIncrement { public static void main(String[] args) { int c = 0; for(int i=0;i<10;i++){ c = c++; } System.out.println(c); } }
最后結果是多少?答案等於10?我可以肯定的告訴你錯了,答案是0,這是為什么?
下面咱們講一下Java是怎么樣處理自增的:
i++ 和 ++i原理
i++ 即后加加,原理是:先自增,然后返回自增之前的值
++i 即前加加,原理是:先自增,然后返回自增后的值
重點:這是一般人所不知道的,記住:不論是前++還是后++,都有個共同點是先自增。
1) ++i 原理,等價於
i = i+1;
return i;
2) i++ 原理,用代碼分析表示如下:
int temp = i;
i = i + 1;
return temp;
這3句代表就是上面所說的那樣:i++是先自增,然后返回自增之前的值;
PS:不同語言對自增的處理不太一樣: 在C++中,“count=count++”與“count++”等價;在Java,PHP中處理方式如上述解析;不同語言,自己可以測試一下
PS:關於執行效率的認識:
i++:取出i,復制i,增加i,返回副本;
++i:取出i,增加i,返回i;
i++要增加一個副本,無疑是要多耗內存,當然效率要低一點,當然只是一丟丟罷了,根本不會對程序運行有明顯的影響。
我看過一篇博客,作者的主旨是兩者的效率一樣,地址 http://www.cnblogs.com/anrainie/p/6610379.html
表示有距離感0.0,個人認為JVM也在不斷優化,具體有待研究...