可能重复:
Java += operator原始图float和double:为什么f + = d不会导致类型不匹配错误?
代码示例:
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
的准确性?
可能重复:
Java += operator原始图float和double:为什么f + = d不会导致类型不匹配错误?
代码示例:
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
的准确性?
的compount分配不隐式转换。
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'
合并于[Nambari's anwser](http://stackoverflow.com/a/13822265/1208581)中,两者都很好。 – sulai
@sulai总是欢迎提高答案。 ;) –
作为每JLS 15.26.2
形式E1 OP的化合物赋值表达式= E2相当于E1 =(T)((E1)OP(E2)),其中T是E1的类型,除了E1只评估一次。
这意味着:
f += d;
会变得
f = (float) (f+d);
有关于这个问题的好文章:Java += and implicit casting
+1不确定我应该投票与否:D –
@PeterLawrey:D –
它是这个SO条目的副本:http://stackoverflow.com/questions/8710619/java-operator – sulai
链接的重复数据删除技术是'int'和'long',但它与'float'和'这里是同样的情况double'。 – Mysticial
谢谢你指出重复。我做了很多搜索,但“+ =”是一个不好的术语来搜索。我很抱歉。 – sulai