执行variableOfTypeA + = variableOfTypeB时出现奇怪的类型转换

时间:2012-03-13 14:25:32

标签: java casting type-conversion

我正在使用Java和新手。

当我尝试

int integerValue = 100;
long longValue = 100;
integerValue = integerValue + longValue;

我得到“类型不匹配:无法从long转换为int”。

但是

integerValue+=longValue; 

工作正常,这意味着它正在为我做演员:)

“+ =”本身就提供了什么?有什么具体原因吗?

编辑:哎呀!太常见的问题! :)我应该先彻底搜查,我的不好!!

5 个答案:

答案 0 :(得分:3)

是的,这与section 15.26.2 of the JLS解释完全相同。

  

E1 op= E2形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2)),其中TE1的类型,但E1仅被评估一次。

答案 1 :(得分:2)

您已从Java Puzzlers book发现了Tweedledum拼图。 基本上,复合赋值执行类型转换,而常规赋值不执行。有关详细信息,请参阅JLS

答案 2 :(得分:1)

使用操作赋值运算符,有一个隐式转换。

int i = 10;
i *= 5.5;
// same as
i *= (int) (i * 5.5);

甚至

char ch = '5';
ch /= 1.1; // ch = '0'

答案 3 :(得分:1)

这是对的。在第一个示例中,您必须转换为int,因为左侧表达式的结果结果为long值(仅因为longValuelong)。

 integerValue = (long) (integerValue + longValue);  // this works

+=运算符执行(相同)转换隐含。

这两种行为都在Java语言规范中指定。

答案 4 :(得分:0)

谢谢大家!

所有答案都足够好!

stackoverflow.com/questions/8710619/java-operator :)

提供了更好的解释和示例