初始化和比较整数

时间:2011-07-20 11:57:40

标签: java

除了语法之外,这两种初始化Integer的方法之间是否存在差异(性能,语义等)?

Integer i = new Integer(10);
Integer i = Integer.valueOf(10);

这两种比较Integer的平等与常数之间是否存在差异?

i.equals(CONSTANT);
(CONSTANT).equals(i);

5 个答案:

答案 0 :(得分:5)

new Integer(10)创建一个新的整数对象。

Integer.valueOf(10)可能会返回该对象的实例化实例。 Java保留了一些频繁使用的整数(通常)是小整数。

仅当i.equals(CONSTANT)CONSTANT.equals(i)时,

inull的行为才会有所不同。我更喜欢第二种形式,因为它更安全。

答案 1 :(得分:3)

  • new Integer(10)将始终使用值Integer创建新的10对象。
  • Integer.valueOf(10)将从池中返回值为Integer的{​​{1}}对象(该池仅包含有限范围的值,此池外的数字将返回新的10对象也是如此。

  • {li>

    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)

link解释了第一个。

除非CONSTANT.equals(i)为空,否则

NUllPointerExcpetion不会明显抛出CONSTANT

答案 4 :(得分:1)

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

  2. 除了inull时除外。后者应该用于处理这种情况,而不是进行无关的if检查。