【问题标题】:Compare value in hashmap with string将 hashmap 中的值与字符串进行比较
【发布时间】:2021-10-02 15:06:00
【问题描述】:

我有一个这样的哈希图:

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

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

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

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

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

我的问题是:Java返回给我一条警告信息:

方法调用 'equals' 可能会产生 'NullPointerException'

当我运行程序时,它不能正常工作。

【问题讨论】:

  • 它的意思是,由于值在 if 语句中,它可能并不总是具有键的值。因此可能出现 NullPointerException。你能分享一下“不能正常工作”的确切含义吗?
  • "doesn't work as it should" 只是用词不当,代码根本不起作用
  • 通过反转操作数来避免 NullPointerException - if ("stringToCompare".equals(myMap.get("keyName"))) {

标签: java string nullpointerexception hashmap


【解决方案1】:

消息说明了一切:

Method invocation 'equals' may produce 'NullPointerException'

这意味着,当您对可能是字符串的对象应用 equals 时,可能是 null

当您从带有键keyName 的映射中获取值时,不能保证equals 方法map.get(key) 会为您提供对象。如果映射不包含任何具有该键的值,它将返回null,因此会返回NullPointerException 警告。

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

【讨论】:

  • 感谢您的帮助,我找到了我的问题。现在它的工作:)
【解决方案2】:

你可以在这里使用多种方法

1) map.getOrDefault("keyName","").equals("stringToCompare")
2) Objects.deepEquals(map.get("keyName"),"stringToCompare")
3) "stringToCompare".equals(map.get("keyName"))

【讨论】:

    【解决方案3】:

    使用这个。

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

    【讨论】:

      最近更新 更多