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

时间:2012-04-05 21:50:55

标签: 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");
      }
    }
}

2 个答案:

答案 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。