可能重复:
可能导致精度损失的不同行为
代码示例A.
public class Test {
public static void main(String[] args) {
int i = 0;
i = i + 1.5;
}
}
Run Code Online (Sandbox Code Playgroud)
代码示例B.
public class Test {
public static void main(String[] args) {
int i = 0;
i += 1.5;
}
}
Run Code Online (Sandbox Code Playgroud)
不出所料,编译A会产生以下错误.令人惊讶的是,编译B不会产生任何错误,并且它看起来像在双值1.5之前插入一个显式转换为整数.为什么世界会发生这种情况?这违背了我认为我知道的一切!
Test.java:6: possible
loss of precision
found : double
required: int
i = i + 1.5;
^
1 error
Run Code Online (Sandbox Code Playgroud)
Mec*_*kov 12
它按设计工作.复合运算符向操作添加隐式强制转换.否则你必须使用显式的强制转换.
更多信息?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
| 归档时间: |
|
| 查看次数: |
5084 次 |
| 最近记录: |