1. 程式人生 > >java中關於++x前加加和x++後加加的疑惑!

java中關於++x前加加和x++後加加的疑惑!

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);  
}  

說實話,我對上面的解釋還是比較懵懂,希望高手和小夥伴們能幫我解惑一下,不吝賜教!希望知道原理的小夥伴在文章後面踴躍給我留言唄!大家一起學習和進步!