JDK学习笔记

Auto Boxing

2018-12-22  本文已影响3人  吉不赛

自动拳击?No,根据我前2篇文章,这显然也是一篇技术文章。

首先要了解Auto Boxing,就得了解Java中的数据类型,Java中的数据类型分为2类,基础数据类型和包装数据类型。

基础数据类型就是int long float double boolean 这几种。对应的,Java还提供包装类型 Integer Long Float Double Boolean。

这几种包装类型与基础类型的最大不同就是包装类型是允许null值的。基础类型则不行。

而Auto Boxing 是Java语言中提供的一个类似语法糖的东西,为程序员提供便利。 你可以把基础类型和对应的包装类型直接进行比较或者运算,Java会自动帮你做装箱、拆箱的动作。

那么问题来了,下面这段代码,为啥抛空指针错误?


Optional<PlanStop> planStopOp= planStops.stream().filter(item -> stop.getOid() == item.getParentStopId()).findFirst();

这里解释下,stop.getOid()拿到的是基础类型的long,item.getParentStopId() 拿到的是包装类型Long,在比较的时候,Java自动会把包装类型UnBoxing成基础类型,但是由于item.getParentStopId()  中有可能为Null值,所以在拆箱的时候会报空指针错误。

这里吐槽下java的Lambda表达式,我在发现这里报空指针的时候,找了很久也没找到原因,因为这个报错是被吞掉了。所以只能根据猜测去试,非常不明显。

上一篇 下一篇

猜你喜欢

热点阅读