gpt4 book ai didi

java - 为什么 Long.valueOf(0).equals(Integer.valueOf(0)) 为假?

转载 作者:太空狗 更新时间:2023-10-29 22:43:03 33 4
gpt4 key购买 nike

这个问题是由strange HashMap.put() behaviour提示的

我想我明白为什么了Map<K,V>.put需要 K但是Map<K,V>.get需要 Object ,似乎不这样做会破坏太多现有代码。

现在我们进入一个非常容易出错的场景:

java.util.HashMap<Long, String> m = new java.util.HashMap<Long, String>();
m.put(5L,"Five"); // compiler barfs on m.put(5, "Five")
m.contains(5); // no complains from compiler, but returns false

如果 Long 不是可以通过返回 true 来解决吗?值是 int范围和值是否相等?

最佳答案

这里是 Long.java 的来源

public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}

即它必须是 Long 类型才能相等。我认为之间的主要区别:

long l = 42L
int i = 42;
l == i

您上面的示例是,对于基元,可能会隐式扩大 int 值,但是对于对象类型,没有从 Integer 隐式转换为 Long 的规则。

另请查看 Java Puzzlers , 它有很多类似的例子。

关于java - 为什么 Long.valueOf(0).equals(Integer.valueOf(0)) 为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445990/

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