先看一段代码:
public class HelloB{
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
}
}
输出多少呢?
答案是0;
具体过程可以这样理解:
①:tmp=i;
②:i=i+1;
③:i=tmp;
当然,如果变为i=++i;
那么结果就为1了。
有兴趣可以看看字节码,来辅助分析,说实话我暂时也不理解,按分析还是输出1,但编译器说是0那就是0;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=2, args_size=1
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: istore_1
7: getstatic #16 // Field java/lang/System.out:Ljav
a/io/PrintStream;
10: iload_1
11: invokevirtual #22 // Method java/io/PrintStream.prin
tln:(I)V
14: return