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