检查密钥是否在映射中 - 一种方式有效,另一种方式无效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查密钥是否在映射中 - 一种方式有效,另一种方式无效相关的知识,希望对你有一定的参考价值。
我正在尝试检查密钥是否在地图(Java)中,并且对我为什么其中一个解决方案起作用而另一个不起作用有点困惑。
特别是:当我将myMap.get(s)
直接与null
进行比较时,它可以工作,但是当我第一次将myMap.get(s)
保存到变量(number
)然后与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
", 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
", number);
}else
{
System.out.println("Not in dict");
}
}
}
我想知道我应该如何理解这一点,因为对我而言myMap.get(s)
也只是一个整数?
谢谢阅读。
int
永远不会是null
,但Integer
可以。
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
", number);
} else {
System.out.println("Not in dict");
}
number
是原始类型int
,因此不能是null
。
如果你改为写Integer number = myMap.get(s);
,你的null
-check就行了。
但要检查是否存在密钥,您应该使用containsKey(...)
。
在第二种情况下,您将值存储在“int”变量上,该变量是基元,永远不能为null。将其更改为“整数”,它的工作原理。
int number = myMap.get(s);
返回Integer
,它可以是null
。因此,当它是null
时,原始的int
不能保持该值并将导致异常。要么使用Integer
来存储值,要么在访问之前使用contains()
进行检查。
以上是关于检查密钥是否在映射中 - 一种方式有效,另一种方式无效的主要内容,如果未能解决你的问题,请参考以下文章