可能重复:
Java += operator
代码示例:
double d = 1;
float f = 2;
f += d; // no error?
f = f+d; // type mismatch error, should be f = (float) (f+d);
那么为什么f+=d
不会产生错误(甚至在运行时都没有),尽管这会降低d
的准确性?
答案 0 :(得分:5)
E1 op = E2形式的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,但E1仅被评估一次。
这意味着:
f += d;
将成为
f = (float) (f+d);
答案 1 :(得分:4)
复合赋值执行隐式转换。
a #= b;
相当于
a = (cast to type of a) (a # b);
另一个例子
char ch = '0';
ch *= 1.1; // same as ch = (char)(ch * 1.1);
// ch is now '4'
答案 2 :(得分:2)
有一篇关于这个主题的好文章:Java += and implicit casting