public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); i = i++; //陷阱 System.out.println(i); } void fermin(int i){ i++; } }
会输出什么?
答案解说:
可以用javap工具来观察内存的运动:
1,新建一个文件 c:/T.java :
class T { public static void main(String[] args){ int i = 0; i = (i++) ; System.out.println(i); } }
2,在cmd中执行: cd \ ,然后执行“ javac T.java && javap -c -verbose T > Tout.txt && java T ”
打开Tout.txt文件,其中一段字节码是这样的:
public static void main(java.lang.String[]); 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 #2; //Field java/lang/System.out java/io/PrintStream; 10: iload_1 11: invokevirtual #3; //Method java/io/PrintStream.println I)V 14: return LineNumberTable: line 3: 0 line 4: 2 line 5: 7 line 6: 14