作者:追麾 | 来源:互联网 | 2022-12-12 19:35
在使用HashMaps时,我发现了一个奇怪的行为,
import java.util.HashMap;
public class Demo {
public static void main(String[] ar) {
HashMap ht = new HashMap<>();
ht.put("1", new Integer(1));
ht.put("2", new Integer(2));
ht.put("3", new Integer(3));
System.out.println(ht.get(2));
}
}
上面的代码输出null.但是如果我将键作为整数1而不是字符串,则检索值.任何人都可以解释原因,为什么检索Integer值而不是String值.
1> Andreas..:
因为"2"
不一样Integer(2)
.
A String
只能是equals()
另一个String
.
见的Javadoc的String.equals()
:
其结果是true
,当且仅当参数不null
和是一个String
对象,它表示字符的相同序列与此对象.
一个Integer
只能是equals()
另一个Integer
.
见的Javadoc的Integer.equals()
:
其结果是true
,当且仅当参数不null
和是一个Integer
对象包含相同int
的值作为该对象.
因此,既然"2"
并且2
彼此不相等,根据定义,它们在a中是不同的键HashMap
.