为什么用空指针而不是类强制转换?


26

在Java中:

int count = (Integer) null;

引发java.lang.NullPointerException。

为什么这样不抛出Class Cast Exception以便于程序员理解?

为什么选择此例外而不是其他任何例外?

Answers:


46

执行代码时,Java运行时将执行以下操作:

  1. 将null转换为Integer类的对象。
  2. 尝试通过调用方法intValue()将Integer对象拆箱为int
  3. 在null对象上调用方法将引发NullPointerException。

换句话说,可以将null强制转换为Integer,而不会出现问题,但是不能将null整数对象转换为int类型的值。

编辑

不久前,我在Stack Overflow遇到了一个相关问题,请参阅此处


1

Java成功将null转换为不引用任何对象的Integer引用。

可以,因为未经验证是供参考的有效状态。

这是无法执行的不存在对象的方法的调用。

执行强制转换(Integer)null与声明Integer变量,然后未能为其分配新的(或已经存在的)Integer对象实例相同。


-1

将a拆箱Integerintie in中int i = new Integer(15);i实际上等于new Integer(15).intValue() i = (Integer) o; 其中Object o = 15相同o = Integer.valueOf(15);i = null; 抛出NullPointerException,因为i那么平等 null.intValue()会抛出一个NullPointerException


2
大约两年前接受的答案提供了几乎相同的解释,但更为明确。对于Java 5+,此答案也不正确:现在使用valueOf()工厂方法,而不是为装箱创建新实例。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.