Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪一个更好:让Java进行自动装箱还是使用valueOf()呢_Java_Performance_Autoboxing - Fatal编程技术网

哪一个更好:让Java进行自动装箱还是使用valueOf()呢

哪一个更好:让Java进行自动装箱还是使用valueOf()呢,java,performance,autoboxing,Java,Performance,Autoboxing,我只是想知道让java autobox说一个整数有什么区别: Integer myInteger = 3; // This will call Integer.valueOf() 或者将您的代码作为 Integer myInteger = Integer.valueOf(3); 在这方面有任何微观优化吗?我知道第二个更明确,但也更不必要键入,除此之外还有什么区别吗?它们在内部是相等的,所以使用第一个变量。很有可能,未来的编译器优化可能会使第一个在将来更快。我会使用第一个选项。代码更少的情况下

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

Integer myInteger = 3; // This will call Integer.valueOf()
或者将您的代码作为

Integer myInteger = Integer.valueOf(3);

在这方面有任何微观优化吗?我知道第二个更明确,但也更不必要键入,除此之外还有什么区别吗?

它们在内部是相等的,所以使用第一个变量。很有可能,未来的编译器优化可能会使第一个在将来更快。

我会使用第一个选项。代码更少的情况下也是如此

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


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

我知道,在性能上确实没有太大的差异,请参阅本文
这个差异实际上并不是什么区别,但您应该使用valueOf,因为Integer现在缓存-128和127之间的整数对象。

性能增益?很难,我认为这只是一个微观优化。这是真的,只是编辑了我的问题,谢谢。在旧版本的JVM中,没有自动装箱,所以不会编译。从1.5版开始,自动装箱就开始了,而变体也是如此。@Daniel:是的,这是好的一面。您知道在编译(或失败)之后,如果它不能立即工作,为什么只用于服务器端操作?在客户端,它的性能也一样。我只是假设他/她在做服务器端开发(web应用程序的网站),java主要用于此:)修复:)希望对您来说没问题。很有可能,未来的编译器优化可能会使第一个在将来更快。这是没有意义的,如果有任何内在的,它们都将被应用。反例:它们可能决定为前5个数字定义常量,而当前它们使用数组存储前127(?)个实例。编译器可能会决定将第一个转换为myInteger=Integer.THREE,而另一个仍然是方法调用和数组访问!JIT做了其他好事。bestsss:编译器将字符串连接等转换为对StringBuilder的调用。很简单,因为字节码指令中没有定义字符串连接。此外,字节码指令中没有定义自动装箱。这是编译器工作,而不是运行时工作。编译器认识到需要自动装箱才能从源代码中获取一些工作字节码。编译器可以用他想要的任何方式来做,只要他符合规范。完成后,字节码就不再需要知道,是否有自动装箱或手动装箱,并显式调用valueOf。@bestsss在最后一部分我不同意你的意见。假设
a
b
是字符串,
String s=a+b转换为
String s=new StringBuilder(a).append(b).toString()“寓意很简单:除非性能无关,否则不要使用字符串串联运算符组合多个字符串。”