哪个更好:让Java进行自动装箱或使用valueOf()

Osc*_*mez 18 java performance autoboxing

我只是想知道让java autobox说一个整数有什么区别:

Integer myInteger = 3; // This will call Integer.valueOf()
Run Code Online (Sandbox Code Playgroud)

或者你的代码是

Integer myInteger = Integer.valueOf(3);
Run Code Online (Sandbox Code Playgroud)

这有什么微优化吗?我知道第二个更明确,但它也更不必要打字,除此之外有什么区别吗?

Dan*_*iel 19

无论如何它们在内部是相同的,所以使用第一个变体.机会很好,未来的编译器优化可能会使未来的第一个更快.

  • 反例:他们可能决定为前5个数字定义常量,而目前他们使用数组来存储前127个(?)实例.编译器可能决定将第一个转换为myInteger = Integer.THREE,而另一个仍然是方法调用和数组访问. (4认同)
  • *机会很好,未来的编译器优化可能会在未来使第一个更快.*这没有任何意义,如果有任何内在的,它们将被应用于两者. (2认同)
  • @bestsss我会在最后一部分与你不同意.假设`a`和`b`是字符串,`String s = a + b;`将由编译器翻译成`String s = new StringBuilder(a).append(b).toString();`实际上,有效Java的第51项标题为"小心字符串共处的性能"有一个原因...引用,`"道德很简单:不要使用字符串连接运算符来组合多个字符串,除非性能无关紧要. "` (2认同)

Gor*_*vic 5

我会使用第一个选择。用更少的代码也能达到同样的效果。

除非我预计该程序必须在旧版本的 JVM 上运行。然而,在这种情况下,这远不是唯一的兼容性问题。

因此,不使用自动装箱的唯一原因是它不可用。