Java中的+=等价于

10 浏览
0 Comments

Java中的+=等价于

这样写:

x -= y;

与这样写等效:

x = x - y;

admin 更改状态以发布 2023年5月23日
0
0 Comments

是的,它是相同的语法在大多数派生自C的语言中。

0
0 Comments

不,它们不是以你表达的方式等价的。

short x = 0, y = 0;
x -= y;    // This compiles fine!
x = x - y; // This doesn't compile!!!
              // "Type mismatch: cannot convert from int to short"

第三行存在问题,因为-会对short操作数执行所谓的“数字提升”(JLS 5.6),并产生一个int值,不能简单地赋给一个short,需要使用一个强制类型转换。复合赋值运算符包含一个隐藏的转换!

确切的等价性在JLS 15.26.2 复合赋值运算符中阐述:

E1 op= E2形式的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,但E1只被计算一次。

所以为了澄清一些细微差别:

  • 复合赋值表达式不会重新排列操作数
    • 左边始终在左边,右边始终在右边
  • 两个操作数都完全括起来以确保op具有最低优先级
    • int x = 5; x *= 2 + 1; // x == 15, not 11
  • 存在一个隐藏的转换
    • int i = 0; i += 3.14159; // this compiles fine!
  • 左边只计算一次
    • arr[i++] += 5; // this only increments i once

Java还有*=/=%=+=-=<<=>>=>>>=&=^=|=。最后3个也适用于布尔类型(JLS 15.22.2 布尔逻辑运算符)。

相关问题

0