Java + =含义

Fra*_*nXh -4 java operators

我在一段代码中看到了这个符号/运算符:

a+=1;
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚它的作用.有谁可以帮助我吗?

use*_*064 10

它相当于

a = a + 1;
Run Code Online (Sandbox Code Playgroud)

  • 不太相同.例如,如果`a`是`byte`或`short`,那么`a + = 1`是合法的,但是'a = a + 1`是行不通的.问题是`a + 1`是一个`int`,因此必须先将其缩小才能再次分配给`a`. (4认同)

Ted*_*opp 8

Java语言规范:

除了仅计算一次之外,表单的复合赋值表达式E1 op= E2等效于E1 = (T) ((E1) op (E2)),where T的类型.E1E1

如果左侧有副作用,最后一个短语很重要:

array[i++] += 1;
Run Code Online (Sandbox Code Playgroud)

等于:

array[i++] = array[i++] + 1;
Run Code Online (Sandbox Code Playgroud)

第一个表达式将递增i一次.第二个将递增i两次,并将右侧值分配给array第一个表达式的不同元素.

我应该注意到这些副作用声明并不是很好的编程形式,尽管你经常发现它们已被使用.

演员表也很重要,因为其类型(E1) op (E2)可能与作业不兼容E1.例如,如果a是类型short,a++则不等同于a = a + 1.后者不会编译,因为在没有强制转换的情况下,a + 1is 的类型是int和不能分配给short变量.这就是为什么在这种情况下的规范说a++相当于a = (short) ((a) + (1)).如果a属于char或类型,同样的事情byte.


Chr*_*man 7

x += y;
Run Code Online (Sandbox Code Playgroud)

相当于

x = x + y;
Run Code Online (Sandbox Code Playgroud)

其他数学运算有类似的运算符: - =,*=,/ =.例如:

x *= y;
Run Code Online (Sandbox Code Playgroud)

相当于

x = x * y;
Run Code Online (Sandbox Code Playgroud)

(编辑:以上假设x中没有'副作用';即,增量前或后增量算子.编辑以反映Ted Hopp的观点)


Dav*_*ung 5

它是以下的简写:

a = a + 1;
Run Code Online (Sandbox Code Playgroud)