1

速记 Java 算术运算符的一个示例a += 4;a=a+4;

在 The Complete Reference, Java 2 中,Herbert Schildt 提到“它们在 Java 运行时系统中的实现比它们的等价物更有效”

是什么使它的实施比a=a+4;

4

4 回答 4

6

只有微基准可以在任何给定的执行环境中确认或拒绝作者的主张。

在现代 JVM 上,这两个版本很有可能表现出相同的性能。

PS 如果书名中的“2”与“Java 2”中的一样,我强烈建议您购买一本更新的书!

于 2013-11-13T15:03:14.060 回答
4

因为a += 4 javac可以生成IIC指令,该指令通过常量递增局部变量理论上它比IADD更有效。

IADD添加 int并从堆栈中弹出两个值,然后推回结果。 IIC在堆栈上什么都不做,但增加局部变量。

JVM因此,如果您可能会像在Java Card上发现的那样使用非常有限且原始的东西,这可能很重要,但在 %99.9 的场景中它并不重要。Java、JVM 和大多数其他虚拟机都取得了长足的进步。

顺便说一句,你用的是哪个版本的书?亚马逊提到它将在 2014 年推出第 9 版。如果书中还保留着那句话,我会感到惊讶。

于 2013-11-13T15:10:20.513 回答
1

与一元增量运算符 ( ++) 一样,两个版本在性能方面是相同的,因为它们生成了相同的字节码(至少使用 Eclipse JDT)。

于 2013-11-13T15:09:43.637 回答
0

a+=4:它提供隐式类型转换。例如,考虑 a+=4.4 它会自动将 4.4 转换为 4。但是a = a+4.4会给你投射错误。

于 2013-11-13T15:09:08.920 回答