2012-12-11 18 views
4

可能重复:
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的准确性?

+0

链接的重复数据删除技术是'int'和'long',但它与'float'和'这里是同样的情况double'。 – Mysticial

+0

谢谢你指出重复。我做了很多搜索,但“+ =”是一个不好的术语来搜索。我很抱歉。 – sulai

回答

3

的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' 
+1

合并于[Nambari's anwser](http://stackoverflow.com/a/13822265/1208581)中,两者都很好。 – sulai

+1

@sulai总是欢迎提高答案。 ;) –

4

作为每JLS 15.26.2

形式E1 OP的化合物赋值表达式= E2相当于E1 =(T)((E1)OP(E2)),其中T是E1的类型,除了E1只评估一次。

这意味着:

f += d; 

会变得

f = (float) (f+d);

+0

我想你是指'f =(float)(f + d);';) –

+0

@PeterLawrey:你是对的。更新了答案。感谢您指出。 – kosa

+0

我希望你不介意我把你的出色答案合并到Peter Lawrey的答案中吗? – sulai

2

有关于这个问题的好文章:Java += and implicit casting

+0

+1不确定我应该投票与否:D –

+0

@PeterLawrey:D –

+0

它是这个SO条目的副本:http://stackoverflow.com/questions/8710619/java-operator – sulai

相关问题