在使用HashMaps时,我发现一种奇怪的行为, import java.util.HashMap; public class Demo { public static void main(String[] ar) { HashMap<String, Integer> 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。但是,如果我将key作为Integer 1而不是string,则将检索到值。任何人都可以解释为什么原因,为什么要获取Integer值而不是String值。
2 回答
![?](http://img1.sycdn.imooc.com/5458626a0001503602200220-100-100.jpg)
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
因为"2"
不一样Integer(2)
。
一个String
只能是equals()
另一个String
。
见的Javadoc的String.equals()
:
其结果是
true
,当且仅当参数不null
和是一个String
对象,它表示字符的相同序列与此对象。
一个Integer
只能是equals()
另一个Integer
。
见的Javadoc的Integer.equals()
:
其结果是
true
,当且仅当参数不null
和是一个Integer
对象包含相同int
的值作为该对象。
因此,由于"2"
和2
彼此不相等,因此根据定义,它们不是相同的键HashMap
。
![?](http://img1.sycdn.imooc.com/54584cfb0001308402200220-100-100.jpg)
慕村9548890
TA贡献1884条经验 获得超4个赞
System.out.println(ht.get(2))
至
System.out.println(ht.get("2"))
因为键是String
Type,而您传递Int
Type。
添加回答
举报
0/150
提交
取消