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中关于++x前加加和x++后加加的疑惑!java中关于++x前加加和x++后加加的疑惑!java中关于++x前加加和x++后加加的疑惑!

我之前看过一本书,叫《改善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);  
}  

说实话,我对上面的解释还是比较懵懂,希望高手和小伙伴们能帮我解惑一下,不吝赐教!希望知道原理的小伙伴在文章后面踊跃给我留言呗!大家一起学习和进步!