-4

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

a+=1;

但我无法弄清楚它的作用。有人能帮助我吗?

4

5 回答 5

10

它相当于

a = a + 1;
于 2012-06-29T17:51:10.797 回答
8

来自Java 语言规范

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

如果左侧有副作用,最后一句话很重要:

array[i++] += 1;

等同于:

array[i++] = array[i++] + 1;

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

我应该注意,尽管您经常发现它们被使用,但这些副作用语句并不是好的编程形式。

强制转换也很重要,因为 的类型(E1) op (E2)可能与 . 的赋值不兼容E1。例如,如果a是 类型shorta++则不等价于a = a + 1。后者不会编译,因为类型a + 1int并且不能在没有强制转换的情况下分配给short变量。这就是为什么这种情况下的规范说这a++相当于a = (short) ((a) + (1)). 如果a是 typechar或,情况也是如此byte

于 2012-06-29T17:57:03.670 回答
7
x += y;

相当于

x = x + y;

其他数学运算也有类似的运算符:-=、*=、/=。例如:

x *= y;

相当于

x = x * y;

(编辑:以上假设 x 中没有“副作用”;即,前置或后置运算符。编辑以反映 Ted Hopp 的观点)

于 2012-06-29T17:51:01.763 回答
5

它是以下内容的简写:

a = a + 1;
于 2012-06-29T17:50:55.110 回答
1

这意味着a = a + 1即增量a

于 2012-06-29T17:51:10.297 回答