将布尔对象与布尔基元进行比较

Vib*_*hor -4 java boolean

这段代码的输出是什么?请解释如何在此处完成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");
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

代码失败,NullPointerException因为bool[1]包含null.按照Java语言规范,第5.1.8节,的拆箱Boolean是通过调用booleanValue()Boolean参考.因为在这种情况下,参考是null,你得到一个NPE.

在对另一个答案的评论中,你写道:

提出这个问题的原因是要了解我们是通过AutoUnBoxing还是通过AutoBoxing获取NPE.在我的理解中,由于AutoBoxing.

这是由于取消装箱(从参考类型中提取原语),而不是装箱(在参考类型中包装一个原型).具体来说,来自JLS Section 15.21.2(布尔等式运算符==!=):

如果其中一个操作数是类型Boolean,则进行拆箱转换(第5.1.8节).