我在一段代码中看到了这个符号/运算符:
a+=1;
但我无法弄清楚它的作用。有人能帮帮我吗?
答案 0 :(得分:10)
相当于
a = a + 1;
答案 1 :(得分:8)
来自Java Language Specification:
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
的类型为char
或byte
,则同样如此。
答案 2 :(得分:7)
x += y;
相当于
x = x + y;
其他数学运算也有类似的运算符: - =,* =,/ =。例如:
x *= y;
相当于
x = x * y;
(编辑:以上假设x中没有'副作用';即前增量或后增量算子。编辑以反映Ted Hopp的观点)
答案 3 :(得分:5)
以下是简写:
a = a + 1;
答案 4 :(得分:1)
这意味着a = a + 1
,即增加a
。