Java 比较两个数字,Primitive 相等

Java camparing two numbers, equality for Primitive

问题可能很简单。 检查了两个 Primitive 类型的相等性,然后出现了一些错误。 一双,二一长。

public class TesterPrimitive {

public static void main(String[] args) {
    System.out.println("Equality - " + (5.0 == 5)); // Return true
    System.out.println("Equality - " + (5.000000000000001D == 5L)); // Return false
    System.out.println("Equality - " + (5.0000000000000001D == 5L)); // Return true
}}

为什么第三个相等,对于 double 和 long,我得到了 true? 意思是,(.)后面的长0数,把任意值改成绝对0?或者它是改变位然后我们可以获得 5.0 的双倍?

如您所见https://www.geeksforgeeks.org/difference-float-double-c-cpp/ double 精确到 15 位数字。第 16 位四舍五入。

另一件可能很重要的事情是理解 - 当像这里 (5.0 == 5) 这样对不同的基元执行操作时,为了相等操作,int 被提升为 double。更多内容 https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html