【发布时间】:2012-06-29 17:50:18
【问题描述】:
我在一段代码中看到过这个符号/运算符:
a+=1;
但我无法弄清楚它的作用。有人可以帮帮我吗?
【问题讨论】:
我在一段代码中看到过这个符号/运算符:
a+=1;
但我无法弄清楚它的作用。有人可以帮帮我吗?
【问题讨论】:
相当于
a = a + 1;
【讨论】:
a 是byte 或short,那么a += 1 是合法的,但a = a + 1 不起作用。问题是a + 1 是int,因此必须通过强制转换来缩小范围,然后才能再次将其分配给a。
来自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 类型,情况也是如此。
【讨论】:
x += y;
等价于
x = x + y;
其他数学运算也有类似的运算符:-=、*=、/=。例如:
x *= y;
等价于
x = x * y;
(编辑:以上假设 x 中没有“副作用”;即,前置或后置运算符。编辑以反映 Ted Hopp 的观点)
【讨论】:
它是以下内容的简写:
a = a + 1;
【讨论】:
表示a = a + 1,即递增a。
【讨论】:
a 中添加一个。