b=a++和b=++a区别及a=++a、a=a++的注意事项
下面是鄙人在学习java中,遇到的关于a++和++a之间的小问题以及个人的理解。
在此之前,
b=a++是先把a的值赋给b,然后a自加1;
b=++a是a先自加1,在把值赋给b
- b=a++;
public static void a(){
int a=1;
int b=1;
for(int i=0;i<5;i++){
b=a++;
}
System.out.println("a="+a);
System.out.println("b="+b);
}
过程与预测结果:
在栈中,
(1)代码运行用到的方法入栈;
(2) b=a++是先把a的值赋给b,然后a自加1;
结果预测 a=6;b=5
运行结果
- b=++a
public static void b(){
int a=1;
int b=1;
for(int i=0;i<5;i++){
b=++a;
}
System.out.println("a="+a);
System.out.println("b="+b);
}
过程还是在栈中操作的
b=++a是a先自加1,在把值赋给b。
运行结果
练习1:
public static void c(){
int a=0;
int b=0;
for(int i=0;i<5;i++){
b=a++; -------1(i=0时 b=0,a=1)
a=a++; -------2
}
System.out.println("a="+a);
System.out.println("b="+b);
}
运行结果:
在练习中出现了a=a++;和a=++a;语句
当执行到第2步时,与b=a++;和b=++a;有点区别。
下图为参考大佬的.class文件(包含a=a++;)
可以看出开始把a的值暂时保存起来,当a++执行完(a+1=2时)要赋值给变量a的时候,把暂时的数据拿出来,赋给变量a。等于2的结果被覆盖。所以当执行到练习的第2步时,a=1而不是a=2。