此代码的输出是什么?请解释如何在此处完成Autoboxing或拆箱ID。
class MyBoolean
{
Boolean[] bool = new Boolean[5];
public static void main(String[] args)
{
new MyBoolean().myMethod();
}
public void myMethod()
{
if(bool[1]==true)
{
System.out.println("It's true");
}
else
{
System.out.println("It's false");
}
}
}
答案 0 :(得分:5)
代码因NullPointerException
而失败,因为bool[1]
包含null
。根据{{3}},Boolean
的取消装箱是通过调用Boolean
参考上的Java Language Specification, Section 5.1.8来完成的。因为在这种情况下,引用是null
,所以你得到一个NPE。
在对另一个答案的评论中,您写道:
提出这个问题的原因是要了解我们是通过AutoUnBoxing还是通过AutoBoxing获取NPE。在我的理解中,由于AutoBoxing。
这是由于取消装箱(从引用类型中提取原语),而不是装箱(在引用类型中包装一个原型)。具体来说,来自booleanValue()
(布尔等式运算符==
和!=
):
如果其中一个操作数的类型为
Boolean
,则会进行拆箱转换(第5.1.8节)。
答案 1 :(得分:4)
运行失败:bool [1]为空,比较抛出NullPointerException。