问题描述:
Exception in thread "main" java.lang.NullPointerException
Integer num1 = null;
Long long1 = null;
Boolean bool1 = null;
Float float1 = null;
Double double1 = null;
boolean intFlag = num1 == 1;
boolean longFlag = long1 == 1;
boolean floatFlag = float1 == 1;
boolean doubleFlag = double1 == 1;
boolean boolFlag = bool1 == true;
问题分析:
1、包装类和包装类比较时,由于两个都是对象会直接比较地址,不会出现空指针异常。
包装类跟基本类型比较时,包装类会调用各自的xxxValue()方法,先转化成基本类型,再跟基本类型比较,但是由于包装类的值为null,调用自带的xxxValue()方法会报空指针异常。
Integer num1 = null;
Long long1 = null;
Boolean bool1 = null;
Float float1 = null;
Double double1 = null;
boolean intFlag = num1 == 1;//等于num1.intValue() == 1
boolean longFlag = long1 == 1;//等于long1.longValue() == 1
boolean floatFlag = float1 == 1;//等于float1.floatValue() == 1
boolean doubleFlag = double1 == 1;//等于double1.doubleValue() == 1
boolean boolFlag = bool1 == true;//等于bool1.booleanValue() == true
解决办法:包装类跟基本类型比较时,先判断包装类是否为null。
Integer num1 = null;
Long long1 = null;
Boolean bool1 = null;
Float float1 = null;
Double double1 = null;
boolean intFlag = num1 != null ? num1 == 1 : false;
boolean longFlag = long1 != null ? long1 == 1 : false;
boolean floatFlag = float1 != null ? float1 == 1 : false;
boolean doubleFlag = double1 != null ? double1 == 1 : false;
boolean boolFlag = bool1 != null ? bool1 == true : false;