这段代码的输出是什么?请解释如何在此处完成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)
代码失败,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节).
| 归档时间: |
|
| 查看次数: |
3154 次 |
| 最近记录: |