为什么Long equals在相同值时返回false?

时间:2017-04-24 09:06:40

标签: java compare equals

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

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

为什么equals的{​​{1}}比较会返回Long

3 个答案:

答案 0 :(得分:5)

仅当参数也是false时,

Long.equals才会返回true

javadoc说:

  

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

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

true

答案 1 :(得分:3)

查看已实施的比较方法,您将找到关键标准:

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;

在这种背景下并不相同。

答案 2 :(得分:0)

您将Long与int进行了比较! .equals方法也检查变量的类型 这是一个用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);