java - 检查 key 是否在 map 中 - 一种方法有效,另一种方法无效

标签 java hashmap

我正在尝试检查 key 是否在 map (Java)中,并且对为什么我的解决方案之一有效而另一个无效的原因感到有点困惑。

特别是:当我直接将 myMap.get(s)null 进行比较时,它可以工作,但是当我第一次保存 myMap.get(s) 时code> 到变量 (number),然后与 null 进行比较,它会抛出一个 运算符 != 对于参数类型 int, null 未定义 错误。

有效的代码:

import java.util.*;
import java.io.*;

class test1{
    public static void main(String []argh){
        // Create a map
        Map<String, Integer> myMap; 
        myMap = new HashMap<String, Integer>();
        // Make an entry in the map
        String key = "hello";
        int value = 5;
        myMap.put(key, value);


        String s = "hi";

        if (myMap.get(s) != null)
        {
            int number = myMap.get(s);
            System.out.printf("%s\n", number);
        }else
        {
            System.out.println("Not in dict");
        }
    }
}

无效的代码:

import java.util.*;
import java.io.*;

class test2{
    public static void main(String []argh){
        // Create a map
        Map<String, Integer> myMap; 
        myMap = new HashMap<String, Integer>();
        // Make an entry in the map
        String key = "hello";
        int value = 5;
        myMap.put(key, value);


        String s = "hi";
        int number = myMap.get(s);
        if (number != null)
        {
            System.out.printf("%s\n", number);
        }else
        {
            System.out.println("Not in dict");
        }
    }
}

我想知道我应该如何理解这一点,因为对我来说 myMap.get(s) 也只是一个 int?

感谢您的阅读。

最佳答案

int 永远不能为 null,但 Integer 可以。

myMap.get(s) 返回一个 Integer,可以是 null

int number = myMap.get(s);

如果 myMap.get(s) 返回 null,则会抛出 NullPointerException

如果您想安全地将值分配给变量,请使用Integer变量:

Integer number = myMap.get(s);
if (number != null) {
    System.out.printf("%s\n", number);
} else {
    System.out.println("Not in dict");
}

关于java - 检查 key 是否在 map 中 - 一种方法有效,另一种方法无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49126852/

相关文章:

JavascriptExecutorexecuteScript 不返回

java - 为 hibernate 驱动测试创建初始数据

java - 我怎么知道我的 html 页面何时加载

java - BufferedReader.readLine() 在强行断开连接时挂起

java - 我无法将数据插入我的数据库

c++ - 如何将 hash_map 与 char* 一起使用并进行字符串比较?

java - 字符串什么时候缓存它的哈希码?是在 String 对象创建期间还是在调用 hashcode 方法后?

java - 比较 hashmap 键中的 ArrayList

java - 从 HashMap 在 Java 中创建 CSV 文件

Java Bean - 通过原型(prototype)范围需要相同的对象