jak*_*b.g 104
编程的"常识" x += y是一种等效的简写符号x = x + y.只要x并且y属于同一类型(例如,两者都是ints),您可以认为这两个语句是等价的.
然而,在Java中,x += y 不等同于x = x + y一般.
如果x和y是不同的类型,这两种说法的行为,由于语言的规则不同.例如,让我们有x == 0(int)和y == 1.1(double):
int x = 0;
x += 1.1; // just fine; hidden cast, x == 1 after assignment
x = x + 1.1; // won't compile! 'cannot convert from double to int'
Run Code Online (Sandbox Code Playgroud)
+=执行隐式转换,而+您需要显式转换第二个操作数,否则您将收到编译器错误.
引自Joshua Bloch的Java Puzzlers:
(...)复合赋值表达式自动将它们执行的计算结果转换为左侧变量的类型.如果结果的类型与变量的类型相同,则强制转换无效.但是,如果结果的类型比变量的类型宽,则复合赋值运算符执行静默缩小基元转换[ JLS 5.1.3 ].
Eng*_*uad 16
x += y 是 x = x + yx -= y 是 x = x - yx *= y 是 x = x * yx /= y 是 x = x / yx %= y 是 x = x % yx ^= y 是 x = x ^ yx &= y 是 x = x & yx |= y 是 x = x | y等等 ...
jef*_*unt 13
它是一个赋值运算符.它取值为x0.1,然后将(x + 0.1)的结果存储回来x.
所以:
double x = 1.3;
x += 0.1; // sets 'x' to 1.4
Run Code Online (Sandbox Code Playgroud)
它功能相同,但短于:
double x = 1.3;
x = x + 0.1;
Run Code Online (Sandbox Code Playgroud)
注意:在进行浮点数学运算时,事情并不总是按照您认为的方式运行.