有什么区别,
Integer i = new Integer("42");
和
Integer i = Integer.valueOf("42");
感谢。
答案 0 :(得分:4)
没有,看看Integer.java:
public static Integer valueOf(String s) throws NumberFormatException {
return new Integer(parseInt(s, 10));
}
此外,JavaDoc
答案 1 :(得分:2)
使用new
非常明确地要求为每次出现创建一个新对象。
使用工厂模式(valueOf
)为实现提供了一个机会(它不需要接受),而是从缓存中提供已经创建的实例。
我听说有一些实现缓存前100个左右的整数,因为它们经常发生,足以让它得到回报。
最有用的情况是使用Boolean
。我们知道只有两个可能的不同值,因此valueOf
总是返回这两个中的一个,而没有创建新对象的开销。将new
与布尔值一起使用是合法的,但总会在性能和内存使用方面产生开销。
答案 2 :(得分:1)
查看我们可以告诉的源代码没有区别。
前者使用构造函数显式创建一个新整数。
后者使用工厂方法创建一个整数(结果是调用构造函数)。
第二个调用第一个的事实是实现细节,并且在所有实现中都不一定正确,在某些情况下它可能不会调用构造函数但使用缓存(如{{1 }})
在两种情况下,生成的Integer的行为完全相同。
然而,没有什么可以阻止将第二个改为:
valueOf( int i )
这个更改可以在下一个版本中执行(或者某些VM可以这样做)并且您的代码将在升级中“自动”获取,而另一方面,使用构造函数则不能,因为好吧,你是显式调用构造函数。