分配给原始 int 的 Null Integer 对象会抛出 NullPointerException

Viv*_*wal -1 java default-value

Integer i = null;
int j = i;
System.out.println(j);
Run Code Online (Sandbox Code Playgroud)

为什么它抛出NullPointerException并且不打印jas的值0

xle*_*ier 5

Integer是一个对象。因此它是可以为空的。

Integer i = null;
Run Code Online (Sandbox Code Playgroud)

是正确的。

int另一方面,是一个原始值,因此不能为空。

int j = i;
Run Code Online (Sandbox Code Playgroud)

相当于

int j = null;
Run Code Online (Sandbox Code Playgroud)

这是不正确的,并抛出一个NullPointerException.

感谢 JNYRanger 的扩展:

这种从原始值对象包装器到其原始等价物的隐式转换称为“拆箱”,并且只要对象持有非空值,就会起作用。

Integer i = 12;
int j = i;
System.out.println(j);
Run Code Online (Sandbox Code Playgroud)

按预期输出 12。