use*_*064 10
它相当于
a = a + 1;
Run Code Online (Sandbox Code Playgroud)
从Java语言规范:
除了仅计算一次之外,表单的复合赋值表达式
E1 op= E2等效于E1 = (T) ((E1) op (E2)),whereT的类型.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.
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的观点)