为什么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