==运算符返回false,如果比较具有相同值的Double类型

时间:2014-05-06 20:52:53

标签: java equals autoboxing

为什么当我比较两个具有相同值的双基元类型时,equal方法是错误的?但整数不是

public class EqualMethod {
    public static void main(String[] args) {        
        Double value1 = 6.2;
        Double value2 = 6.2;        
        System.out.println(value1 == value2);

        Integer number1 = 2;
        Integer number2 = 2;
        System.out.println(number1 == number2);  
    } 
}

3 个答案:

答案 0 :(得分:5)

您正在比较参考而不是值。要么:

value1.equals(value2);

或做:

value1.doubleValue() == value2.doubleValue();

在这里阅读更多关于Autoboxing的信息,以了解为什么它有时(有整数)有效,为什么有时却没有。请注意,所有整数是2:6 = 2 + 4的幂的总和,而小数则不是:6.2 = 4 + 2 + 1/8 + ...

答案 1 :(得分:0)

两个变量都是通过装箱转换为Double对象来初始化的。在对象上使用==时,如果它们是同一个对象,则会比较引用,并且不会比较内容。

要比较内容,您可以使用equals method,也可以检查调用compareTo的结果是否等于0。或者,您可以将这两个变量声明为double,然后==将直接比较这些值。

答案 2 :(得分:0)

==需要参考比较

.equals用于内容比较

1.在您的代码中,将创建两个对象,引用value1value2指向不同的对象。如果使用value1==value2,它将返回false。指向同一个对象,它将返回true

Double value1 = 6.2;
Double value2 = 6.2;   

2.如果您使用value1.equals(value2),它将比较将返回true的对象的内容