为什么Java中2个Long变量与==运算符不相等?

当我尝试比较2个Long变量时,我遇到了一个非常奇怪的问题,它们始终显示为false,并且可以通过在Eclipse中进行调试来确保它们具有相同的数字值:

if (user.getId() == admin.getId()) {

return true; // Always enter here

} else {

return false;

}

以上两个返回值都是对象类型Long,这使我感到困惑。并确认我编写了这样的主要方法:

Long id1 = 123L;

Long id2 = 123L;

System.out.println(id1 == id2);

它打印真实。

有人可以给我个主意吗?我从事Java开发已经3年了,但是无法解释这种情况。

回答:

==比较参考,.equals()比较值。这两个Long是对象,因此使用==运算符时会比较对象引用。

但是,请注意,使用会将Long id1 =

123L;字面值123L自动装箱到Long对象中Long.valueOf(String),并且在内部,此过程将使用LongCache,该LongCache具有[-128,127]范围,并且123在此范围内,这意味着将对long对象进行缓存,并且这些两个实际上是相同的对象。

以上是 为什么Java中2个Long变量与==运算符不相等? 的全部内容, 来源链接: utcz.com/qa/409254.html

回到顶部