==操作符返回false如果比较Double类型与相同的值



当我比较两个具有相同值的双基本类型时,为什么相等的方法是假的?然而整数不是

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);  
    } 
}

您正在比较引用而不是值。要么做:

value1.equals(value2);

或做的事:

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

在这里阅读更多关于自动装箱的内容,以了解为什么有时(对于整数)自动装箱可以工作,为什么有时不能。注意,所有整数都是2的幂的和:6 = 2 + 4,而小数不是:6.2 = 4 + 2 + 1/8 +…

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

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

==用于参考比较

.equals用于内容比较

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

Double value1 = 6.2;
Double value2 = 6.2;   

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

最新更新