比较null Character与字符抛出异常

时间:2018-05-08 19:43:16

标签: java nullpointerexception

为什么以下投掷NPE?

Character c = null;
if(c == ' ') {   
  System.out.println("Is space");  
}  

这是c.equals(' ')的一些语法糖吗?

3 个答案:

答案 0 :(得分:11)

不完全是。操作c == ' '等同于c.charValue() == ' ',因此在charValue()上调用null时,会抛出NullPointerException

这是一个"拆箱" c上的操作,而不是"拳击" ' '后跟equals()测试。

答案 1 :(得分:4)

在处理等于运算符==期间,binary numeric promotion发生。

  

如果等于运算符的操作数都是数字类型,或者一个是数字类型而另一个是可转换的(第5.1.8节)是数字类型,则对操作数执行二进制数字提升(第5.6.2节) )。

     

请注意,二进制数字促销执行值集转换(第5.113节),并可执行拆箱转换(第5.1.8节)

Unboxing conversion

  
      
  • 如果rnull,则取消装箱转化会引发NullPointerException
  •   

JVM将Characterchar视为操作数。它们可以转换为数字类型,因此它会将Character取消装箱。 Characternull,因此解释了NPE。

它可能被认为是“语法糖”,但只是因为它会自动为你执行拆箱。

答案 2 :(得分:0)

试试这个..

Character c = null;
if(c != null) {   
  if(c.equals(' ')) {   
  System.out.println("Is space");  
}    
} else{System.out.println("c is null !!!");  }