Java 拆箱时的意外行为

问题描述

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 行的地方 int 原始类型中放置一个整数,则一切正常。那么,这里的问题是,为什么 java 拆箱不在内部处理这个 null 值并将 null 分配给名为 value 的变量?

解决方法

那么,这里的问题是,为什么 java 拆箱不在内部处理这个空值并将空值分配给名为 value 的变量?

您的 value 变量是一个 int 原语。原语不能有 null 值。只有对象可以。

,

int 是原始类型。

null 不是原始类型,它代表一个不存在的对象引用,不能自动装箱为原始类型。

int value = null; 可以被视为您所要求问题的更“明确”版本,甚至无法编译。