除了语法之外,这两种初始化Integer
的方法之间是否存在差异(性能,语义等)?
Integer i = new Integer(10);
Integer i = Integer.valueOf(10);
这两种比较Integer
的平等与常数之间是否存在差异?
i.equals(CONSTANT);
(CONSTANT).equals(i);
答案 0 :(得分:5)
new Integer(10)
创建一个新的整数对象。
Integer.valueOf(10)
可能会返回该对象的实例化实例。 Java保留了一些频繁使用的整数(通常)是小整数。
i.equals(CONSTANT)
为CONSTANT.equals(i)
时, i
和null
的行为才会有所不同。我更喜欢第二种形式,因为它更安全。
答案 1 :(得分:3)
new Integer(10)
将始终使用值Integer
创建新的10
对象。 Integer.valueOf(10)
将从池中返回值为Integer
的{{1}}对象(该池仅包含有限范围的值,此池外的数字将返回新的10
对象也是如此。
Integer
会在i.equals(CONSTANT)
为NullPointerException
时抛出i
。
null
永远不会抛出CONSTANT.equals(i)
(假设NullPointerException
是非空CONSTANT
字段且其static final
方法是理智的。)答案 2 :(得分:1)
正如Integer.valueOf的Java Doc所说,
返回表示指定int值的Integer实例。如果一个 新的Integer实例不是必需的,这个方法一般应该是 优先使用构造函数Integer(int),就像这个方法一样 可能会产生明显更好的空间和时间表现 缓存经常请求的值。
<强>参数:强> 我是一个int值。
<强>返回:强> 表示i的整数实例。
<强>时间:强> 1.5
答案 3 :(得分:1)
答案 4 :(得分:1)
Integer.valueOf(int)
具有更好的性能,因为它会将值缓存在-128到127之间。
除了i
为null
时除外。后者应该用于处理这种情况,而不是进行无关的if
检查。