Bra*_*Zhu 18 java equals long-integer
当我尝试比较2个Long变量时,我遇到了一个非常奇怪的问题,它们总是显示为false,我可以通过Eclipse中的调试确定它们具有相同的数值:
if (user.getId() == admin.getId()) {
return true; // Always enter here
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
以上两个返回值都是对象类型的Long,这让我很困惑.并验证我写了一个这样的主方法:
Long id1 = 123L;
Long id2 = 123L;
System.out.println(id1 == id2);
Run Code Online (Sandbox Code Playgroud)
它打印真实.
有人可以给我一些想法吗?我已经在Java Development工作了3年但是无法解释这个案例.
Bla*_*ker 34
==比较参考,等于比较值.这两个Long是Object,所以他们比较引用.
但是==在.equals()内部使用自动自动装箱到Long对象,进程将使用LongCache,而123位于LongCache [-128,127]之间,因此它们实际上是同一个对象.
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
Run Code Online (Sandbox Code Playgroud)
所以它适用于较小的长值
另见