拳击可以使用的地方

时间:2013-12-18 20:40:07

标签: java

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

3 个答案:

答案 0 :(得分:7)

  

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

由于x从未初始化,因此它具有默认值:null

  

此外,为什么它会抛出“NullPointerException?”

由于autounboxing is just a method call inserted by the compilerInteger变成了int:它会调用Integer#intValue()。但是没有实例,所以就像尝试这样做:

Integer x = null;
int someInt = x.intValue();

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


自动装箱所涉及的步骤,包括此NPE行为,请参阅the JLS § 5.1.8, Unboxing Conversion.快乐阅读!

答案 1 :(得分:4)

当您的代码运行并且您致电doStuff(x)时,xnull,因为您尚未对其进行初始化。编译器将生成调用x.intValue()的字节代码,以便将int传递给您的方法。由于xnull,您将获得NullPointerException

答案 2 :(得分:1)

作为引用类型的整数,类型为Integer的变量可以包含null或对Integer对象的引用。他们只想说如果x为空,则无法将其转换为int