java中int a=0;a=a++;a为什么等于0?
大晚上的给 a++ 和 ++a 搞晕了
例如:
Integer a = 0;
int b = 0;
for (int i = 0; i < 99; i++) {
a = a ++;
b = a ++;
}
System.out.println(a);//99
System.out.println(b);//98
不信的可以去看看:java中i++ 和 ++i的区别
直接上代码
public static void main(String[] args) throws Exception {
int a = 0;
int b = 0;
a = a++;
System.out.println(a);
b = a++;
System.out.println(a);
System.out.println(b);
}
编译后的class文件
public static void main(String[] args) throws Exception {
int a = 0;
int b = false;
byte var10000 = a;
int a = a + 1;
a = var10000;
System.out.println(a);
var10000 = a;
a = a + 1;
int b = var10000;
System.out.println(a);
System.out.println(b);
}
我们把它翻译一遍
public static void main(String[] args) throws Exception {
int a = 0;
int b = 0;
// a++ 第一步先创建一个变量=a
byte var10000 = a;
// 然后第二步把a+1,此时a=1
int a = a + 1;
//第三步赋值,由于赋值的变量var10000=0,所以a=0
a = var10000;
System.out.println(a);//输出0
//第二次a++ 跟上面一样先赋值a
var10000 = a;
//然后a=a+1,此时a=1
a = a + 1;
//变量var10000=0,所以b也是0,但是此时a并没有再次赋值0所以a最终会=1
int b = var10000;
System.out.println(a);//输出1
System.out.println(b);//输出0
}
输出