我正在尝试检查一个密钥是否在地图(Java)中,并且我对我的一个解决方案的工作原理和另一个解决方案的工作原理有点困惑。
特别是:当我将myMap.get(s)
直接与null
进行比较时,它会有效,但是当我首先将myMap.get(s)
保存到变量(number
)然后与{{1它会抛出null
错误。
有效的代码:
The operator != is undefined for the argument type(s) 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");
}
}
}
也只是一个int?
感谢阅读。
答案 0 :(得分:2)
int
永远不会是null
,而Integer
可以。{/ p>
myMap.get(s)
会返回Integer
,可以是null
。
int number = myMap.get(s);
如果NullPointerException
返回myMap.get(s)
,会抛出null
。
如果要将值安全地分配给变量,请使用Integer
变量:
Integer number = myMap.get(s);
if (number != null) {
System.out.printf("%s\n", number);
} else {
System.out.println("Not in dict");
}
答案 1 :(得分:0)
number
属于原始类型 int
,因此无法null
。
如果您改为撰写Integer number = myMap.get(s);
,则null
- 检查会有效。
但要检查是否存在密钥,您应该使用containsKey(...)
代替。
答案 2 :(得分:0)
在第二种情况下,您将值存储在&#34; int&#34; varible,这是一个原始的,永远不能为null。将其更改为&#34;整数&#34;它有效。
答案 3 :(得分:0)
int number = myMap.get(s);
返回Integer
,可以是null
。因此,当它为null
时,原始int
无法保存该值并将导致异常。使用Integer
来存储值,或者在访问之前使用contains()
进行检查。