[英]Initializing and comparing integers
除了语法之外,这两种初始化Integer
的方式之间是否存在差异(性能、语义等)?
Integer i = new Integer(10);
Integer i = Integer.valueOf(10);
这两种比较Integer
与常数相等的方法之间有区别吗?
i.equals(CONSTANT);
(CONSTANT).equals(i);
new Integer(10)
创建一个新的 integer object。
Integer.valueOf(10)
可能会返回 object 的实习实例。 Java 保留了一个经常使用的整数池(通常)小的整数。
i.equals(CONSTANT)
和CONSTANT.equals(i)
仅当i
为null
时行为不同。 我更喜欢第二种形式,因为它更安全 null。
new Integer(10)
将始终创建一个值为10
的新Integer
object 。 Integer.valueOf(10)
will return a Integer
object with the value 10
from a pool (the pool only contains a limited range of values, numbers outside of this pool will return a new Integer
object as well).
当i
为null
时, i.equals(CONSTANT)
将引发NullPointerException
。
CONSTANT.equals(i)
永远不会抛出NullPointerException
(假设CONSTANT
是非空static final
字段并且其equals()
方法是正常的)。正如 Integer.valueOf 的 Java 文档所说,
返回表示指定 int 值的 Integer 实例。 如果不需要新的 Integer 实例,则通常应优先使用此方法而不是构造函数 Integer(int),因为此方法可能会通过缓存频繁请求的值来显着提高空间和时间性能。
参数: i 一个 int 值。
返回:代表 i 的 Integer 实例。
自: 1.5
这个链接解释了第一个。
CONSTANT.equals(i)
显然不会抛出NUllPointerExcpetion
,除非CONSTANT
是 null。
Integer.valueOf(int)
具有更好的性能,因为它缓存了 -128 到 127 之间的值。
什么都没有,除非i
是null
。 后者应该用于处理这种情况,而不是进行无关的if
检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.