Java:不同的double和double相比
发布时间:2020-12-14 05:14:43 所属栏目:Java 来源:网络整理
导读:我知道Double是一个包装类,它包含双数.今天我又看到另一个主要区别: double a = 1.0;double b = 1.0;Double c = 1.0;Double d = 1.0;System.out.println(a == b); // trueSystem.out.println(c == d); // false 我很奇怪! 所以,如果我们使用Double,每次都
我知道Double是一个包装类,它包含双数.今天我又看到另一个主要区别:
double a = 1.0; double b = 1.0; Double c = 1.0; Double d = 1.0; System.out.println(a == b); // true System.out.println(c == d); // false 我很奇怪! 所以,如果我们使用Double,每次都必须这样做: private static final double delta = 0.0001; System.out.println(Math.abs(c-d) < delta); 我无法解释为什么Double直接比较错误.请为我解释. 谢谢 :) 解决方法
c和d在技术上是两个不同的对象,==运算符只比较引用.
c.equals(d) 更好的是比较价值,而不是参考.但仍然不理想.直接比较浮点值应该总是考虑一些误差(ε)(Math.abs(c-d)< epsilon). 注意: Integer c = 1; Integer d = 1; 这里的比较会产生真实的,但是这更复杂(整数内部缓存,在JavaDoc of
为什么要valueOf()?因为这种方法是隐式用于实现自动装箱: Integer c = Integer.valueOf(1); Integer d = Integer.valueOf(1); 也可以看看 > Weird Integer boxing in Java (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |