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

我有这个 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');  //null

String letterList = phone.get(String.valueOf('2'));  //it works


为什么第一种情况不起作用?在我的理解中,char可以隐式转换为字符串“2”,并使用 HashMapequals()来比较键,以便它应该检索映射中的键?


湖上湖
浏览 99回答 2
2回答

莫回无

为什么第一种情况不起作用?在我的理解中, char 可以隐式转换为 String "2"你的理解不正确。Achar不会隐式转换为String.&nbsp;如果你查看文档,你会看到这个方法get(Object key)。我不知道为什么不是这样get(K key)。但是,这解释了为什么您的第一个示例编译没有任何错误:char常量被自动装箱到一个Character对象中。由于Character带有值的'2'不是您的键Map,get()因此返回null。

料青山看我应如是

java.util.Map仅将对象用作键,因此无论何时您这样做,map.get('c')因为 c 是一个字符,编译器将执行自动装箱操作,将字符 c 原语解析为Character对象(不是您认为的字符串)所以最后编译器将解析以下内容:&nbsp;map.get('2')进入 >map.get(Character.valueOf('2'))并且由于Character.valueOf('2')您的地图中不存在密钥,因此返回 null
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java