java中对null进行强制类型转换会不会报错了?
public Map<String, Object> getBiu(String id) {
Object o = redisCacheUtil.get(id);
System.out.println(o);
int i = (int) o;
Map<String, Object> map = mapMapper.selectRecommend(i,0);
return map;
}
上述代码是根据用户id从redis中获取某个信息,而redisCacheUtil.get(id)内部可能会返回null值的情况。这是对null进行强制类型转换会出现空指针异常嘛?
下述是上面编译后的代码,发现将null转变为基本数据类型int时会先将其转变为Integer,然而Integer在自动拆箱时会调用intValue(),这时就会出现空指针异常(NullPointerException)
public Map<String, Object> getBiu(String id) {
Object o = this.redisCacheUtil.get(id);
System.out.println(o);
//Integer自动拆箱为int会调用intValue()方法
//下面转换实际为:int i=((Integer)o).intValue()
int i = (Integer)o;
Map<String, Object> map = this.mapMapper.selectRecommend(i, 0);
return map;
}
在转变为基本数据类型时会出现空指针异常(NullPointerException)那么转变为引用数据类型了?
将上述代码int转变为Integer
public Map<String, Object> getBiu(String id) {
Object o = this.redisCacheUtil.get(id);
System.out.println(o);
Integer i = (Integer)o;
Map<String, Object> map = this.mapMapper.selectRecommend(i, 0);
return map;
}
将此代码运行并不会出现空指针异常(NullPointerException),将null值赋值给一个引用数据类型或者强制转换不会出现问题。
总结:
- 将null值强制类型转换为基本数据类型时,会出现空指针异常
- 将null值强制类型转换为引用数据类型时,不会出现空指针异常,一个对象能够接受null