gpt4 book ai didi

java - 为什么 2 Long 变量不等于 Java 中的 == 运算符?

转载 作者:太空狗 更新时间:2023-10-29 22:31:34 24 4
gpt4 key购买 nike

当我试图比较 2 个 Long 变量时,我遇到了一个非常奇怪的问题,它们总是显示 false,我可以通过在 Eclipse 中调试来确定它们具有相同的数值:

if (user.getId() == admin.getId()) {
return true; // Always enter here
} else {
return false;
}

上面2个返回值都是对象类型的Long,让我很困惑。并验证我是否编写了这样的主要方法:

Long id1 = 123L;
Long id2 = 123L;

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

它打印为真。

那么有人可以给我一些想法吗?。我从事 Java 开发工作已有 3 年,但无法解释这种情况。

最佳答案

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

但是,请注意,在 Long id1 = 123L; 中,文字值 123L 将使用 自动装箱到 Long 对象中Long.valueOf(String),在内部,这个过程会使用一个[-128,127]范围的LongCache,123在这个范围内,这意味着long对象被缓存了,这两个其实是同一个对象。

关于java - 为什么 2 Long 变量不等于 Java 中的 == 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com