将哈希图中的值与字符串进行比较

Compare value in hashmap with string

提问人:g_codex 提问时间:7/27/2021 最后编辑:g_codex 更新时间:7/28/2021 访问量:553

问:

我有一个这样的哈希图:

private HashMap<String, String> myMap = new HashMap<>();

因此,我在代码中设置了一个键。在我的情况下,key 的值可能会改变:如果一个条件为真,则获得一些值,如果不是,则获得其他值:

if (condition.isTrue) myMap.put("keyName", "stringValue");

最后,我想将此映射中键的值与字符串进行比较:

    if (myMap.get("keyName").equals("stringToCompare")) { 
      [... do something ...] 
    }

我的问题是:Java向我返回一条警告消息:

方法调用“equals”可能会产生“NullPointerException”

当我运行程序时,它无法正常工作。

java 字符串 nullpointerexception 哈希图

评论

0赞 Saatvik Ramani 7/27/2021
它说,由于该值位于 if 语句中,因此它可能并不总是具有键的值。因此,可能出现 NullPointerException。您能否分享一下“无法正常工作”的确切含义。
0赞 g_codex 7/27/2021
“不能正常工作”只是一个用词不当,代码根本不起作用
1赞 DuncG 7/27/2021
通过反转操作数来避免 NullPointerException -if ("stringToCompare".equals(myMap.get("keyName"))) {

答:

0赞 devReddit 7/27/2021 #1

消息说明了一切:

Method invocation 'equals' may produce 'NullPointerException'

这意味着,当你应用于一个对象时,可能是一个字符串,有可能是 .equalsnull

由于您使用 key 从映射中获取值,因此不能保证 的方法会为您提供对象。如果映射不包含任何带有该键的值,它将返回 ,从而发出警告。keyNameequalsmap.get(key)nullNullPointerException

我希望你得到你的答案。但是,对于没有按预期工作的程序,请提供一个最小的可重现示例,指出预期的内容以及您得到的是什么。然后我也会更新我那部分的答案。

评论

0赞 g_codex 7/27/2021
感谢您的帮助,我已经找到了我的问题。现在它的工作:)
0赞 MUKUL JHA 7/27/2021 #2

您可以在此处使用多种方法

1) map.getOrDefault("keyName","").equals("stringToCompare")
2) Objects.deepEquals(map.get("keyName"),"stringToCompare")
3) "stringToCompare".equals(map.get("keyName"))
0赞 Sunghyeon Lee 7/27/2021 #3

使用这个。

if(myMap.get("keyName") != null) {
    if(myMap.get("keyName").equals("stringToCompare")) {
        //do something...
    }
}