Auto Boxing

自动拳击?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表达式,我在发现这里报空指针的时候,找了很久也没找到原因,因为这个报错是被吞掉了。所以只能根据猜测去试,非常不明显。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型(byte、short、int、long) c...
    Jasonme阅读 4,798评论 0 4
  • 第01章 JAVA简介第02章 基础语法第02章 递归补充第03章 面向对象第04章 异常处理第05章 数组第06...
    顺毛阅读 3,468评论 0 1
  • 这几天经历了区块链资产的大涨,几乎是全线疯狂上涨,高的涨幅居然可以有100%,你方唱罢我方登场,涨的不亦乐乎。 而...
    阿伦影子阅读 1,558评论 0 0
  • 短短一天,经历了两件事儿,让我深刻体会到沟通是件多么需要天时地利人和的事情。 场景一。上午从gym回来后,去厨房做...
    夏天的夏阅读 3,744评论 4 1
  • 第四节《把基础知识保存在学生的记忆力》 “在学校工作的30年,使我发现了在我看来是一个重要的秘密——也可以说是一条...
    高翔_b102阅读 1,805评论 0 0

友情链接更多精彩内容