我正在使用Java和新手。
当我尝试
时int integerValue = 100;
long longValue = 100;
integerValue = integerValue + longValue;
我得到“类型不匹配:无法从long转换为int”。
但是
integerValue+=longValue;
工作正常,这意味着它正在为我做演员:)
“+ =”本身就提供了什么?有什么具体原因吗?
编辑:哎呀!太常见的问题! :)我应该先彻底搜查,我的不好!!答案 0 :(得分:3)
是的,这与section 15.26.2 of the JLS解释完全相同。
E1 op= E2
形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,但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
值(仅因为longValue
为long
)。
integerValue = (long) (integerValue + longValue); // this works
+=
运算符执行(相同)转换隐含。
这两种行为都在Java语言规范中指定。
答案 4 :(得分:0)