java中關於++x前加加和x++後加加的疑惑!
阿新 • • 發佈:2018-12-26
java中關於前加加和後加加的疑惑!
大家看下面的程式碼和截圖(執行結果在截圖中可以看到),不知道會不會跟我一樣的感覺,會不會覺得自己對前加加和後加加的知識點還沒學懂呢?
我甚至都一度懷疑是不是自己理解錯了前加加和後加加的知識點!誰能給我解釋下如下的程式碼?
package javase; public class Test2 { public static void main(String[] args) { int x = 8; //理論上來說x的初始值是8,x先賦值給x,x再自加1,此時x的值是9 x = x++; //理論上此時x的值是9才對啊,可是此時打印出來x的值實際上是8,我在這裡疑惑不解? System.out.println("x = " + x); /*理論上此時x的值是9,x先自加1,加完後x的值是10,然後再把10賦值給x,此時x的值理論上來說應 * 該是10才對,可是此時打印出來x的值實際上是9,我在這裡疑惑不解? */ x = ++x; System.out.println("x = " + x); System.out.println("-----------------"); int y = 8; //y的初始值是8,先把y賦值給z,此時z的值是8,y再自加1,此時記憶體中y的值是9 int z = y++; System.out.println("y = " + y + " z = " + z); //此時記憶體中y的值是9,y先自加1,此時記憶體中y的值是10,再把y賦值給z,此時z的值是10 z = ++y; System.out.println("y = " + y + " z = " + z); System.out.println("-----------------"); int a = 66; //先列印a的值,a再自加上1 System.out.println(a++); System.out.println(a); System.out.println("-----------------"); int b = 88; //b先自加1,再列印b的值 System.out.println(++b); System.out.println(b); System.out.println("-----------------"); int number = 23; number = number + 2; System.out.println("number = " + number); System.out.println("-----------------"); int age = 23; age = age++; //不明白為什麼age打印出來還是23,難道不應該是24嗎?誰能解釋下? System.out.println("age = " + age); System.out.println("-----------------"); int salary = 12666; salary = ++salary; //打印出來是12667,誰能解釋下? System.out.println("salary = " + salary); } }
我之前看過一本書,叫《改善Java程式的151個建議》,我有點印象,裡面好像有提到這個問題,但是我記不太清除了!
於是我上網查了一下,那本書裡面的案例和解釋如下:
--警惕自增陷阱
i++表示先賦值後自增,而++i表示先自增後賦值。下面的程式碼返回結果為0,因為lastAdd++有返回值,而返回值是自增前的值(在自增前變數的原始值會存在一個記憶體空間,當自增結束後就會將記憶體空間的值返回)。
public static void main(String[] args) { int lastAdd = 0; for(int i=0;i<10;i++){ lastAdd = lastAdd++; } System.out.println(lastAdd); }
說實話,我對上面的解釋還是比較懵懂,希望高手和小夥伴們能幫我解惑一下,不吝賜教!希望知道原理的小夥伴在文章後面踴躍給我留言唄!大家一起學習和進步!