先看一段代码:
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