繁体   English   中英

初始化和比较整数

[英]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)仅当inull时行为不同。 我更喜欢第二种形式,因为它更安全 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).

  • inull时, 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。

  1. Integer.valueOf(int)具有更好的性能,因为它缓存了 -128 到 127 之间的值。

  2. 什么都没有,除非inull 后者应该用于处理这种情况,而不是进行无关的if检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM