我有这个 String 到 String 的映射,我正在尝试char作为键传递Map<String, String> phone = new HashMap<String, String>() {{ put("2", "abc"); put("3", "def"); put("4", "ghi"); put("5", "jkl"); put("6", "mno"); put("7", "pqrs"); put("8", "tuv"); put("9", "wxyz"); }};String letterList = phone.get('2'); //nullString letterList = phone.get(String.valueOf('2')); //it works为什么第一种情况不起作用?在我的理解中,char可以隐式转换为字符串“2”,并使用 HashMapequals()来比较键,以便它应该检索映射中的键?
2 回答
莫回无
TA贡献1865条经验 获得超7个赞
为什么第一种情况不起作用?在我的理解中, char 可以隐式转换为 String "2"
你的理解不正确。Achar
不会隐式转换为String
. 如果你查看文档,你会看到这个方法get(Object key)
。我不知道为什么不是这样get(K key)
。但是,这解释了为什么您的第一个示例编译没有任何错误:char
常量被自动装箱到一个Character
对象中。由于Character
带有值的'2'
不是您的键Map
,get()
因此返回null
。
料青山看我应如是
TA贡献1772条经验 获得超8个赞
java.util.Map
仅将对象用作键,因此无论何时您这样做,map.get('c')
因为 c 是一个字符,编译器将执行自动装箱操作,将字符 c 原语解析为Character
对象(不是您认为的字符串)
所以最后编译器将解析以下内容: map.get('2')
进入 >map.get(Character.valueOf('2'))
并且由于Character.valueOf('2')
您的地图中不存在密钥,因此返回 null
添加回答
举报
0/150
提交
取消