int a=0;
for(int i=0;i<10;i++)
a=a++;
System.out.println(a);
为什么a是0
其中什么原理如果这样
int a=0;
int b=0
for(int i=0;i<10;i++)
b=a++;
System.out.println(b);
为什么b却可以取得到a累加的值。
for(int i=0;i<10;i++)
a=a++;
System.out.println(a);
为什么a是0
其中什么原理如果这样
int a=0;
int b=0
for(int i=0;i<10;i++)
b=a++;
System.out.println(b);
为什么b却可以取得到a累加的值。
b=a++; //先给b赋值为0 再把a+1, 再循环时a已经变成1了
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 5]
[pc: 4, line: 7]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: com.wang.test.Test
// Method descriptor #15 ([Ljava/lang/String;)V
// Stack: 2, Locals: 3
public static void main(java.lang.String[] args);
0 iconst_0
1 istore_1 [a]
2 iconst_0
3 istore_2 [i]
4 goto 15
7 iload_1 [a]
8 iinc 1 1 [a]
11 istore_1 [a]
12 iinc 2 1 [i]
15 iload_2 [i]
16 bipush 10
18 if_icmple 7
21 getstatic java.lang.System.out : java.io.PrintStream [16]
24 iload_1 [a]
// Compiled from Test.java (version 1.5 : 49.0, super bit)
public class com.wang.test.Test {
// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public Test();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 5]
[pc: 4, line: 7]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: com.wang.test.Test
// Method descriptor #15 ([Ljava/lang/String;)V
// Stack: 2, Locals: 3
public static void main(java.lang.String[] args);
0 iconst_0
1 istore_1 [a]
2 iconst_0
3 istore_2 [i]
4 goto 15
7 iload_1 [a]
8 iinc 1 1 [a]
11 istore_1 [a]
12 iinc 2 1 [i]
15 iload_2 [i]
16 bipush 10
18 if_icmplt 7
21 getstatic java.lang.System.out : java.io.PrintStream [16]
24 iload_1 [a]
25 invokevirtual java.io.PrintStream.println(int) : void [22]
28 return
Line numbers:
[pc: 0, line: 13]
[pc: 2, line: 14]
[pc: 7, line: 15]
[pc: 12, line: 14]
[pc: 21, line: 17]
[pc: 28, line: 19]
Local variable table:
[pc: 0, pc: 29] local: args index: 0 type: java.lang.String[]
[pc: 2, pc: 29] local: a index: 1 type: int
[pc: 4, pc: 21] local: i index: 2 type: int
}
而第2种情况却变成a是1了呢?
相当于汇编语言。通过这个你可以明白a的变化过程
a=a++;这句
等效于:
a=a+1;
a=0;
a++表示先赋值,后自增。
第二种情况,第一次循环,b=a++;右边的a先赋值给左边后自增,左边b的值为0,右边a为1,所以第二次循环b就等于a,值为1,a再自增为2,第三次循环b=2,依次类推,第十次循环b=9;
b=a++; //先给b赋值为0 再把a+1, 再循环时a已经变成1了
我同意这个答案
第二种情况,第一次循环,b=a++;右边的a先赋值给左边后自增,左边b的值为0,右边a为1,所以第二次循环b就等于a,值为1,a再自增为2,第三次循环b=2,依次类推,第十次循环b=9;第二种情况 计算利用的变量为什么不是左边的b