jak*_*b.g 104

编程的"常识" x += y是一种等效的简写符号x = x + y.只要x并且y属于同一类型(例如,两者都是ints),您可以认为这两个语句是等价的.

然而,在Java中,x += y 等同于x = x + y一般.

如果xy是不同的类型,这两种说法的行为,由于语言的规则不同.例如,让我们有x == 0(int)和y == 1.1(double):

    int x = 0;
    x += 1.1;    // just fine; hidden cast, x == 1 after assignment
    x = x + 1.1; // won't compile! 'cannot convert from double to int'
Run Code Online (Sandbox Code Playgroud)

+=执行隐式转换,而+您需要显式转换第二个操作数,否则您将收到编译器错误.

引自Joshua Bloch的Java Puzzlers:

(...)复合赋值表达式自动将它们执行的计算结果转换为左侧变量的类型.如果结果的类型与变量的类型相同,则强制转换无效.但是,如果结果的类型比变量的类型宽,则复合赋值运算符执行静默缩小基元转换[ JLS 5.1.3 ].

  • 另外,如果`x`是一个更复杂的表达式(如数组或字段访问)而不是单个变量,它的组件表达式现在只被评估一次而不是两次. (2认同)

Eng*_*uad 16

  • x += yx = x + y
  • x -= yx = x - y
  • x *= yx = x * y
  • x /= yx = x / y
  • x %= yx = x % y
  • x ^= yx = x ^ y
  • x &= yx = x & y
  • x |= yx = x | y

等等 ...

  • @kommradHomer `x =+ y` 是 `x = 0 + y` (3认同)

jef*_*unt 13

它是一个赋值运算符.它取值为x0.1,然后将(x + 0.1)的结果存储回来x.

所以:

double x = 1.3;
x += 0.1;    // sets 'x' to 1.4
Run Code Online (Sandbox Code Playgroud)

它功能相同,但短于:

double x = 1.3;
x = x + 0.1;
Run Code Online (Sandbox Code Playgroud)

注意:在进行浮点数学运算时,事情并不总是按照您认为的方式运行.