-5

这段代码的输出是什么?请解释如何在这里完成自动装箱或拆箱 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");
      }
    }
}
4

2 回答 2

6

代码失败,NullPointerException因为bool[1]contains null。根据Java 语言规范第 5.1.8 节,a 的拆箱Boolean是通过调用引用来完成booleanValue()Boolean。因为在这种情况下,引用是null,所以你得到一个 NPE。

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

问这个问题的原因是要了解我们是通过 AutoUnBoxing 还是通过 AutoBoxing 获得 NPE。据我了解,这是由于 AutoBoxing。

这是由于拆箱(从引用类型中提取原语),而不是装箱(将原语包装在引用类型中)。具体来说,来自JLS 第 15.21.2 节布尔等式运算符==!=):

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

于 2012-04-05T22:07:41.267 回答
4

运行失败:bool[1] 为 null 并且比较抛出 NullPointerException。

于 2012-04-05T21:55:13.163 回答