我的教授最近说,尽管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
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