【问题标题】:Why does Long equals return false when are the same value?为什么Long等于相同的值时返回false?
【发布时间】:2017-04-24 09:06:40
【问题描述】:

运行以下代码,我希望得到true,但我得到的输出是false

Long value = new Long(0);
System.out.println(value.equals(0));

为什么equalsLong 的比较返回false

【问题讨论】:

  • 0 是一个 int,它被自动装箱为一个不等于 Long 的整数,因为它是不同的类型。
  • 试试value.equals(0L)

标签: java compare equals


【解决方案1】:

Long.equals 仅当参数也是 Long 时才返回 true

javadoc 说:

将此对象与指定对象进行比较。结果为真,如果 并且仅当参数不为 null 并且是 Long 对象时 包含与此对象相同的 long 值

实际上,以下代码将true 作为输出。

Long value = new Long(0);
System.out.println(value.equals(new Long(0)));
System.out.println(value.equals((long) 0));
System.out.println(value.equals(0L);

【讨论】:

    【解决方案2】:

    在实现的比较方法中查看内部,您会发现关键标准:

    if (obj instanceof Long) 
    
    
    
    public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }
    

    所以传递任何其他数字类型将返回 false,即使持有相同的值...

    Integer i = 0;
    

    Long l = 0L;
    

    在那种情况下是不一样的。

    【讨论】:

      【解决方案3】:

      您将 Long 与 int 进行了比较!
      .equals 方法也在检查变量的类型。
      这是一个代码,用于将 int 与 long 相结合:

      int i = 0;
      long l = 0L;
      
      //v1
      System.out.println(i == l);
      //v2
      Long li = new Long(i);
      Long ll = new Long(l);
      System.out.println(li.eqauls(ll));
      //v3
      System.out.println(((long)i) == l);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 2012-11-25
        • 2017-09-21
        相关资源
        最近更新 更多