繁体   English   中英

为什么当相等值时Long equals返回false?

[英]Why does Long equals return false when are the same value?

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

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

为什么Longequals比较返回false

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

Javadoc说:

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

事实上,以下代码获取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);

在已实现的compare方法中查看,您将发现关键条件:

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;

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

您将Long与int进行了比较!
.equals方法也正在检查变量的类型。
这是一个将int长整型的代码:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM