【问题标题】:what is the best way to create primitive wrapper class in Java在 Java 中创建原始包装类的最佳方法是什么
【发布时间】:2015-12-24 10:36:34
【问题描述】:

我知道在 Java 中,有以下三种不同的方法可以将原始类型转换为相应的包装类。但是,如果性能至关重要,是否有任何首选方法?

Integer i = new Integer(5);
Integer i = 5;
Integer i = Integer.valueOf(5);

【问题讨论】:

  • “如果性能很关键”,它可能取决于您正在运行的任务。 Integer i = 5; 感谢自动装箱与 Integer i = Integer.valueOf(5); 相同,这要归功于 -128,127 范围内的整数的内部缓存将允许您重用 Integer 类的这些实例,因此您将使用更少的空间。但是,如果您不关心空间,那么 new Integer(5) 可能会更快,因为您将跳过搜索缓存的整数。
  • New Integer vs valueOf的可能重复

标签: java wrapper primitive-types


【解决方案1】:

Integer.valueOf(int) 的 javadocs 给出了非常明确的建议:

如果不需要新的Integer 实例,通常应优先使用此方法而不是构造函数Integer(int),因为此方法可能会产生明显更好的空间和时间性能 em> 通过缓存频繁请求的值。此方法将始终缓存 -128127 范围内的值,包括在内,并且可能缓存此范围之外的其他值。

正如 cmets 中的 Pshemo 所指出的,以及在此 SO thread 中所考虑的,Integer i = 5; 本质上会自动转换为 Integer i = Integer.valueOf(5);。因此,使用其中任何一个都不会在性能方面产生影响。

因此,如果性能是一个问题,只需避免使用 new Integer(5) 即可从缓存中受益。

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多