Java 拆箱的意外行为
Unexpected behaviour with Java unboxing
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
int value = map.get(2);
System.out.println(v);
在执行上面的代码时,我发现了以下异常
Exception in thread "main" java.lang.NullPointerException
但是如果在第 3 行的 place int 原始类型中放置一个 Integer,则一切正常。所以,这里的问题是为什么 java 拆箱不在内部处理这个 null 值并将 null 分配给名为 value 的变量?
So, the question in here is why doesn't java unboxing take care of this null value internally and assign null to variable called value?
您的 value
变量是一个 int
原语。原语不能有 null
值。只有对象可以。
int
是原始类型。
null
不是原始类型,它表示不存在的对象引用,不能自动装箱为原始类型。
int value = null;
可以被视为您所问问题的更“明确”版本,甚至无法编译。
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
int value = map.get(2);
System.out.println(v);
在执行上面的代码时,我发现了以下异常
Exception in thread "main" java.lang.NullPointerException
但是如果在第 3 行的 place int 原始类型中放置一个 Integer,则一切正常。所以,这里的问题是为什么 java 拆箱不在内部处理这个 null 值并将 null 分配给名为 value 的变量?
So, the question in here is why doesn't java unboxing take care of this null value internally and assign null to variable called value?
您的 value
变量是一个 int
原语。原语不能有 null
值。只有对象可以。
int
是原始类型。
null
不是原始类型,它表示不存在的对象引用,不能自动装箱为原始类型。
int value = null;
可以被视为您所问问题的更“明确”版本,甚至无法编译。