Java中如何避免自动拆箱时因空指针引发的异常长尾疑问?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1400个文字,预计阅读时间需要6分钟。
公司搬迁,临时装卸工,提前两小时到公司拆装设备。结果客户反映,部分功能偶尔不能用。于是参与救火的伙伴们一起排查原因。最终发现导致业务中断的原因。
公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。
最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的。下面就带大家分析一下Java中基础类型的包装类在拆箱和装箱过程中都做了什么,为什么会出现空指针异常,以及面试过程中会出现的相关面试题。
问题重现
下面通过一个简单的示例才重现一下异常出现的场景。
public class BoxTest { public static void main(String[] args) { Map<String,Object> result = httpRequest(); long userId = (Long) result.get("userId"); } // 模拟一个HTTP请求 private static Map<String,Object> httpRequest(){ Map<String,Object> map = new HashMap<>(); map.put("userId",null); return map; } }
基本的场景就是请求一个接口,去接口中取某个值,这个值为Long类型,从Map中取得值之后,进行Long类型的强转。
本文共计1400个文字,预计阅读时间需要6分钟。
公司搬迁,临时装卸工,提前两小时到公司拆装设备。结果客户反映,部分功能偶尔不能用。于是参与救火的伙伴们一起排查原因。最终发现导致业务中断的原因。
公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。
最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的。下面就带大家分析一下Java中基础类型的包装类在拆箱和装箱过程中都做了什么,为什么会出现空指针异常,以及面试过程中会出现的相关面试题。
问题重现
下面通过一个简单的示例才重现一下异常出现的场景。
public class BoxTest { public static void main(String[] args) { Map<String,Object> result = httpRequest(); long userId = (Long) result.get("userId"); } // 模拟一个HTTP请求 private static Map<String,Object> httpRequest(){ Map<String,Object> map = new HashMap<>(); map.put("userId",null); return map; } }
基本的场景就是请求一个接口,去接口中取某个值,这个值为Long类型,从Map中取得值之后,进行Long类型的强转。

