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

-1 java autoboxing equals

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

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);  
    } 
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*son 5

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

value1.equals(value2);

或做:

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

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

  • `Integer`(以及所有其他非fp`Que`实现)使用[Flyweight模式](http://stackoverflow.com/a/2707195)获取-128到127之间的值.尝试超出此范围的数字:) (4认同)
  • 或者只用'double`替换`Double`. (3认同)