为什么Java在使用“plus equals”运算符时执行从double到integer的隐式类型转换?
可能重复:
变化的行为可能导致精度损失
代码示例A
public class Test {
public static void main(String[] args) {
int i = 0;
i = i + 1.5;
}
}
代码示例B
public class Test {
public static void main(String[] args) {
int i = 0;
i += 1.5;
}
}
不出所料,编译A会产生下面的错误。 令人惊讶的是 ,编译B不会产生错误,它看起来像我在double值1.5之前插入一个明确的强制类型转换为整数。 为什么这个世界会发生这种事情? 这违背了我以为我知道的一切!
Test.java:6: possible
loss of precision
found : double
required: int
i = i + 1.5;
^
1 error
它按设计工作。 复合运算符为操作添加隐式转换。 否则,你必须使用明确的演员。
更多信息?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
根据Java语言规范,第15.26.2节:
E1 op = E2形式的复合赋值表达式等价于E1 =(T)((E1)op(E2)),其中T是E1的类型,只是E1只计算一次。 例如,以下代码是正确的:
short x = 3;
x += 4.6;
并导致x的值为7,因为它相当于:
short x = 3;
x = (short)(x + 4.6);
链接地址: http://www.djcxy.com/p/73649.html