当我比较两个具有相同值的双基本类型时,为什么相等的方法是假的?然而整数不是
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。在您的代码中将创建两个对象,引用value1
和value2
指向不同的对象。如果你使用value1==value2
,它将返回false
。如果引用指向同一对象,它将返回true
Double value1 = 6.2;
Double value2 = 6.2;
2。如果您使用value1.equals(value2)
,它将比较对象的内容,将返回true