我在一段代码中看到了这个符号/运算符:
a+=1;
但我无法弄清楚它的作用。有人能帮助我吗?
它相当于
a = a + 1;
来自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
是 类型short
,a++
则不等价于a = a + 1
。后者不会编译,因为类型a + 1
是int
并且不能在没有强制转换的情况下分配给short
变量。这就是为什么这种情况下的规范说这a++
相当于a = (short) ((a) + (1))
. 如果a
是 typechar
或,情况也是如此byte
。
x += y;
相当于
x = x + y;
其他数学运算也有类似的运算符:-=、*=、/=。例如:
x *= y;
相当于
x = x * y;
(编辑:以上假设 x 中没有“副作用”;即,前置或后置运算符。编辑以反映 Ted Hopp 的观点)
它是以下内容的简写:
a = a + 1;
这意味着a = a + 1
即增量a
。