我正在尝试检查 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/