拳击可以使用的地方

use*_*842 4 java

图书来自书 我在书中看到了这个例子,作者试图告诉我们使用拳击.我在理解最后几行时遇到问题,即"当代码尝试调用doStuff(x)时代码抛出异常,因为x并不引用Integer对象." 我不明白为什么x不是Integer Wrapper类的对象.好像,我之前将它定义为静态整数x.这个x变量是不是对Integer Wrapper类的引用?.而且,它为什么抛出"NullPointerException?"

Mat*_*all 7

我不明白为什么x不是Integer Wrapper类的对象.

因为x从未初始化,所以它具有默认值:null.

而且,它为什么抛出"NullPointerException?"

因为autounboxing只是一个由编译器插入的方法调用,用于将其Integer转换为int:它调用Integer#intValue().但是没有实例,所以就像尝试这样做:

Integer x = null;
int someInt = x.intValue();
Run Code Online (Sandbox Code Playgroud)

......这应该是非常明显的.


自动装箱所涉及的步骤,包括此NPE行为,在JLS§5.1.8 ,拆箱转换中指定.快乐阅读!