在Java中,Integer对象应该优先于int原语(对于其他数字类型是否相同)?

时间:2015-05-11 18:32:39

标签: java performance micro-optimization

好的,所以我理解Integer只是一个包装类。但是我担心的是避免使用"包装",在使用原始的int变量时,执行时间可能会有微优化。

我的问题是,真的是Integer对象我们应该更喜欢使用的对象,特别是需要具有良好性能的程序(我的意思是,重要的,O(N ^ n)算法,那些需要几天时间。

此外,double vs Double,float vs Float等的情况相同

3 个答案:

答案 0 :(得分:8)

您应该尽可能使用基元。否则它们就不存在了。 Java的开发人员甚至在开发(for Java 8)Streams时付出了额外的努力,这些Streams支持基本类型(IntStream,LongStream,DoubleStream),因此您不必支付使用Streams时支付的多个盒子和拆箱的性能损失包装类的引用类型。

包装器仅适用于您无法选择的情况(例如,您不能将原始类型直接放在Collection中)。

答案 1 :(得分:2)

包装器类实例需要更多内存(包装值+引用),并生成一些方法调用,其中基元类型仅执行基本操作。但是,某些机制倾向于减少此开销(例如,如果未使用Integer声明,则在-128和127之间的new个实例保留在池中。差异可能很小,但是你可以使用原语,只需要原则:不要使用提供你需要的更多功能的类。

答案 2 :(得分:1)

首选{{1}}到{{1}},除非null是有效值,否则它将被放置在集合中。