当前位置:  开发笔记 > 编程语言 > 正文

我什么时候应该使用原语而不是包装对象?

如何解决《我什么时候应该使用原语而不是包装对象?》经验,为你挑选了3个好方法。

实际上这里是一个类似的主题,没什么实际价值.据我所知,原语表现更好,应该在任何地方使用,除了需要与对象相关的功能(例如null检查)的情况.对?



1> VonC..:

不要忘记,因为为每个装箱事件创建一个新的包装器是非常昂贵的,特别是考虑到它通常在方法的单个范围内使用,Autoboxing使用一个常见的包装器池.

这实际上是flyweight设计模式的实现.当针对众所周知的值进行装箱时,不是创建新的包装器实例,而是从池中提取预先创建的实例并返回.

其结果之一是:仍然不建议使用自动装箱进行科学计算.例如,代码d = a*b + c对a,b,c和d使用Integer类,生成的代码为d.valueOf(a.intValue()*b.intValue()+ c.intValue( )).所有这些方法调用都有自己的开销,因此通常建议在需要时使用自动装箱来存储集合中的基元.

即便如此,如果你有一个庞大的Integer包装int 集合,那么开销可能意味着更长的执行时间,长达20倍,如本文所述.


Jb补充说这个重要的评论:

Wrapper.valueOf(primitive)也使用包装器池.所以更喜欢Integer.valueOf(5)到new Integer(5)



2> Cheekysoft..:

元是他们更快时使用,如对象使用前需要拆箱; 因此,VM有一个额外的步骤来执行.例如,为了对Integer执行算术运算,必须先将其转换为int,然后才能执行算术运算.

在许多商业应用中,这可能很少发生.但是,如果你正在写一些非常重要的东西,比如一个图形转换处理器,你就更有可能关心它.



3> nkr1pt..:

是的,原语比对象快.从java 5开始,您甚至可以混合基元和对象,而无需手动将其转换为另一个.自动装箱机制就是这样做的.

这意味着如果将基元放在集合中,编译器将不会抱怨,并隐式地将基元转换为对象.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有