使用int vs Integer

时间:2012-05-16 17:34:18

标签: java integer int primitive

我遇到一个使用Integer变量的类来捕获要在for循环中使用的大小。这是一个好的做法还是我们应该使用int原始数据类型?

Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j) 

9 个答案:

答案 0 :(得分:77)

提供了Integer类,以便可以以纯OO方式对值进行装箱/取消装箱。除非您特别需要以OO方式使用它,否则请在适当的地方使用int;在这种情况下,整数是合适的。

Java Int vs Integer

  

然而,这里有很多不同的事情。 int是一个数字;一个&gt; Integer是一个可以引用包含数字的对象的指针。

     

...

     

int不是对象,不能传递给任何需要的方法   对象。一个常见的情况是使用提供的集合类(   List,Map,Set) - 尽管可以编写这些版本   提供与对象版本类似功能的类。该   经常需要包装类(Integer,Double等)   每当使用内省时(例如在反射API中)。

更好地描述何时使用其中一种与另一种相比:

在int和Integer之间选择

  

我将从入门前的这些类型开始   详情为何。

     
      
  • 出于性能原因首选int
  •   
  • 获取对象的方法(包括List<T>等通用类型)   将隐式要求使用Integer
  •   
  • 使用Integer相对便宜,低值(-128到   127)因为实习 - 使用Integer.valueOf(int)而不是新的   整数(int)
  •   
  • 不要将==!=与整数类型
  • 一起使用   
  • 当您需要代表时,请考虑使用Integer   没有值(null)
  •   
  • 注意取消装箱整数值为int且值为空值
  •   

答案 1 :(得分:35)

如果您可以使用int这样做。如果值可以是null或用作对象,例如泛型,使用Integer

通常使用哪一个并不重要但通常int表现稍好一些。

答案 2 :(得分:14)

这种方法在实践中并不好,尽可能使用intInteger的用法表示此特定变量可以是null(或者它在集合中,该死的泛型......) - 情况并非如此。

同样使用Integer会增加装箱和拆箱的额外开销。

答案 3 :(得分:3)

这是一个在大型项目中等待发生的潜在灾难。编码器在这里忘记了每个Integer实际上是一个新对象,并且,要将它用作int,必须始终进行装箱和拆箱。它不仅效率低下,而且也无法按预期运行。建议您尽可能使用int,并仅使用Integer将这些值放入列表,容器或数据库存储中。请记住,使用&gt;,&lt;比较对象和==表示除了使用相同的运算符比较基元之外的其他内容。

答案 4 :(得分:1)

始终在可能的地方推广原始类型。

原始类型不能用作GenericArgument或null。

答案 5 :(得分:1)

不要只用它来循环。使用基本类型int(更好的性能),它与类整数不同。

  

Integer类在一个包装中包含一个基本类型int的值   宾语。 Integer类型的对象包含其类型的单个字段   是int。

     

此外,该类提供了几种转换int的方法   to String和String to int,以及其他常量和   处理int时有用的方法。

因此,如果需要调用Integer函数或需要为其赋值空值,请使用Integer。

对于像List

这样的泛型,您还需要使用Integer而不是int

答案 6 :(得分:1)

当需要使用对象时,必须使用Wrapper类,  像Integer,Double,Float等...

例如:

 int n = Integer.parseInt("10");

这里我们将字符串转换为整数(Primitive类型), 但方法parseInt(String str)仅适用于Wrapper类(即Object), 所以我们用它...你会发现它在java中有更多的使用。

答案 7 :(得分:1)

由于装箱和拆箱可能会导致性能下降,因为您需要在基元和引用类型之间进行转换。

但是,Integer类添加了非常有用的其他方法。

答案 8 :(得分:0)

我通常使用Integer,因为纯粹是OO。 int的性能肯定远远好于它的对象,但只有当你在循环中循环数百万次时它才会引人注目。

恕我直言,如果性能在您的应用程序中至关重要,并且您想要挤压甚至单纳秒,那么使用int而不需要任何大脑。但是如果主要关注OO和可读性,那么使用Integer。