热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java手动装箱与原始号码的自动装箱

如何解决《Java手动装箱与原始号码的自动装箱》经验,为你挑选了1个好方法。

我最近在一些代码中工作,当一位同事审查时,被告知我通过删除双值的手动装箱而犯了一个错误.我没想过,但我只是这样做,因为IntelliJ建议我改变它,所以我做了.

我被这位同事指向了Effective Java(第2版)的第221页,其中讨论了Boxed原语如何为空,并且依赖自动装箱可能导致潜在的空指针异常(除其他外)...但在这种情况下,我正在删除手动装箱并让编译器处理它.

但为什么重要呢?如果我有一个方法需要一个Double,作为一个参数,并且之前已经传入new Double(5.0),但是将其改为5相反,那么潜在的含义是什么?



1> Andy Turner..:

如果我有一个方法需要Double,作为参数,并且先前传入了新的Double(5.0),但是将其更改为5,那么潜在的含义是什么?

没有不好的含义,因为这是拳击,而不是拆箱.因此,您不会在这里获得NPE,如果您在传递值的方法中将其取消装箱,也不会.

实际上,5作为Double参数传递与传递并不完全相同new Double(5.0)- 实际上Double.valueOf(5.0).其优点在于Javadoc:

返回表示指定double值的Double实例.如果不需要新的Double实例,通常应优先使用此方法,而不是构造函数Double(double),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能.

所以,Double.valueOf(5.0)由于缓存,你通过传递可以获得更好的性能; 但你可以使用远不那么冗长的代词5.


但是,如果你有重载,你必须要小心:这些方法中的一些可能具有比采用它更具体的方法签名Double,因此将优先调用.


推荐阅读
author-avatar
汽车时尚宠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有