【问题标题】:== operator return false if compare Double type with the same value [duplicate]如果比较 Double 类型的值相同,== 运算符返回 false [重复]
【发布时间】:2014-05-06 20:52:53
【问题描述】:

当我比较两个具有相同值的双基本类型时,为什么 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);  
    } 
}

【问题讨论】:

  • equals() 用于比较对象,== 用于原始数据类型。
  • 顺便说一句,尝试使用Double value1 = Double.valueOf(6.2); Double value2 = Double.valueOf(6.2);,因为不需要分配两个Double 对象来表示相同的值。请参阅javadoc
  • 这些不是原语
  • @2rs2ts 他没有使用new Double(6.2) (它确实分配了新对象)所以我怀疑valueOf 有什么优势;只是杂乱无章
  • 是的,会的。 6.2 远不是一个经常被要求的值。而Double d = 6.2 编译为Double d = Double.valueOf(6.2),而不是Double d = new Double(6.2)。因此,您的代码是编写与 OP 完全相同的内容的更冗长的方式。还要注意 valueOf() 的实际实现是... return new Double(d)

标签: java equals autoboxing


【解决方案1】:

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

value1.equals(value2);

或者做:

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

在此处阅读有关Autoboxing 的更多信息,以了解为什么有时它会起作用(对于整数)以及为什么有时不起作用。请注意,所有整数都是 2 的幂的总和:6 = 2 + 4,而小数则不是:6.2 = 4 + 2 + 1/8 + ...

【讨论】:

  • 或者将Double替换为double
  • @BalusC 是的,这就是我的答案 :)
  • 具有相同值的 Integer 为什么它是真的呢?
  • Integer(以及所有其他非 fp Number 实现)将 Flyweight pattern 用于 -128 和 127 之间的值。尝试一个超出此范围的数字 :)
  • @Durdona Integer 有点不同,请参阅 stackoverflow.com/questions/3130311/… 以获得解释。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    ==供参考比较

    .equals 用于内容比较

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

    Double value1 = 6.2;
    Double value2 = 6.2;   
    

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

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2021-11-07
      • 2011-11-14
      • 2023-04-08
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多