方法是:
x -= y;
Run Code Online (Sandbox Code Playgroud)
相当于:
x = x - y;
Run Code Online (Sandbox Code Playgroud) 题 :
char x = 'a';
x += 3; // ok
x = x + 3; // compile time error
Run Code Online (Sandbox Code Playgroud) 我发现Java的+ =, - =,*=,/ =复合赋值运算符(好问题:)),但它有一部分我不太明白.借用这个问题:
Run Code Online (Sandbox Code Playgroud)int i = 5; long l = 8;然后
i = i + l;将不会编译但i += l;将编译正常.
联系问题的接受答案表明:
形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.
这给出i += l;了与仅评估一次i = (int)((i) + (l));的异常相同的内容i.
A long可能(IIRC甚至保证)长于a int,因此可以保持更大范围的值.
鉴于这种情况很容易导致数据丢失,因为在执行语句(r值表达式评估或赋值)期间的某些时刻必须缩小转换,为什么i += l;不是编译时错误或至少是警告?
在很多语言中 a = a + b 可以写成 a += b 在数值运算的情况下,a + b 与 b + a 相同,因此单个复合运算符就足够了。
此外, a = a - b 可以写成 a -=b 。
但是,ab 不等于 ba。因此,复合赋值运算符不适用于 a = b - a
那么,操作a = b op a(其中op可以是 +、-、*、/、% 和顺序很重要)是否有复合赋值运算符?
[非交换操作]
我有点困惑:
long v = 0;
v <<= 8;
v |= 230;
Run Code Online (Sandbox Code Playgroud)
我知道 << 是带符号的左移运算符,而 | 按位包含 OR 但我对 equals 的作用感到困惑?
所以拳头 v 是 0。那么 << 没有任何效果?那么它等于 1000 但接下来会发生什么呢?
编辑:我已经编辑了标题,以便其他人更好地找到这个问题:添加了“复合运算符”
我有这种可怕的习惯,键入下面的内容,直到测试时才抓住它:
int i = 1;
int j = 2;
i =+ j; //i equals 2, not 3 as intended; assign only, + is unary and works on the j
Run Code Online (Sandbox Code Playgroud)
当然,正确的版本是
int i = 1;
int j = 2;
i += j; //i equals 3, as intended with additive & assignment compound operator
Run Code Online (Sandbox Code Playgroud)
我犯了这么多错误.我不会感到惊讶的是,有一些代码在其中有一个错误,它逃脱了测试用例.必须有办法系统地防止这种情况.有任何想法吗?
以下代码在python中不起作用
x = 11
print(x += 5)
Run Code Online (Sandbox Code Playgroud)
而这段代码确实如此
x = 11
x += 5
print(x)
Run Code Online (Sandbox Code Playgroud)
这是为什么?