我的教授最近说,尽管x = x + 1和x ++显然会给出相同的结果
我想你的教授也许是故意 的x
-after x = x + 1
和x++
will
的价值是相同的。只是重新措辞,因为它似乎在解释问题时造成了混乱。
好的,尽管的值
x将相同,但是它们是不同的运算符,并且在字节码中使用不同的JVM指令。
x +1使用
iadd指令,而
x++使用
iinc指令。尽管这取决于编译器。编译器可以自由地对特定操作使用不同的指令集。我已经针对
javac编译器进行了检查。
对于 eclipse 编译器,来自@Holger的以下注释之一:
我只是用eclipse测试了它,并
iinc为两个表达式生成了它。所以我发现一个编译器产生相同的指令
您可以使用
javap命令检查字节码。让我们考虑以下类:
class Demo { public static void main(String[] args) { int x = 5; x = x + 1; System.out.println(x); x++; System.out.println(x); }}编译上面的源文件,并运行以下命令:
javap -c Demo
该代码将被编译为以下字节码(仅显示该
main方法):
public static void main(java.lang.String[]); Code: 0: iconst_5 1: istore_1 2: iload_1 3: iconst_1 4: iadd 5: istore_1 6: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 9: iload_1 10: invokevirtual #3 // Method java/io/PrintStream.println:(I)V 13: iinc 1, 1 16: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 19: iload_1 20: invokevirtual #3 // Method java/io/PrintStream.println:(I)V 23: return



