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