为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个 String HashMap 不能通过 *char* 键得到正确的值

为什么这个 String HashMap 不能通过 *char* 键得到正确的值

湖上湖 2023-03-23 14:21:44
我有这个 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'不是您的键Mapget()因此返回null


查看完整回答
反对 回复 2023-03-23
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

java.util.Map仅将对象用作键,因此无论何时您这样做,map.get('c')因为 c 是一个字符,编译器将执行自动装箱操作,将字符 c 原语解析为Character对象(不是您认为的字符串)

所以最后编译器将解析以下内容: map.get('2')进入 >map.get(Character.valueOf('2'))

并且由于Character.valueOf('2')您的地图中不存在密钥,因此返回 null


查看完整回答
反对 回复 2023-03-23
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信