使用int与整数

我碰到一个使用Integervariables的类来捕获在for循环中使用的大小。 这是好的做法还是应该使用int原始数据types?

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

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

Java Int与整数

然而,在这里的封面是非常不同的事情。 int是一个数字; an> Integer是一个可以引用包含数字的对象的指针。

一个int不是一个对象,不能传递给任何需要对象的方法。 一个常见的情况是使用提供的集合类(List,Map,Set) – 尽pipe可以编写这些类提供与对象版本类似的function的版本。 包装类(整数,双精度等)经常需要使用内省(例如在reflectionAPI)。

更好地描述何时使用一个和另一个:

在int和Integer之间进行select

在开始详细讨论为什么之前,我将从如何使用这些types开始。

  • 出于性能原因,优先考虑int
  • 采用对象的方法(包括像List<T>这样的genericstypes)将隐含地要求使用Integer
  • 使用Integer对于低值(-128到127),由于interning而使用相对便宜 – 使用Integer.valueOf(int)而不是新的Integer(int)
  • 不要使用==!=和Integertypes
  • 当需要表示缺less值时,请考虑使用Integer (空值)
  • 当心拆箱整数值为int与空值

如果你可以使用int做的话。 如果该值可以为null或被用作对象,例如generics,则使用Integer

通常使用哪一个并不重要,但通常int会稍微好一些。

这种做法在实践中并不好,尽可能使用intInteger用法表示这个特定的variables可以是null (或者它是在一个集合中,该死的generics…) – 事实并非如此。

同样使用Integer引入了一个额外的开箱和拆箱的开销。

这是一个等待在大型项目中发生的潜在灾难。 这里的编码器忘了每一个Integer实际上是一个新的对象,并且把它作为一个int来使用,必须一直装箱和拆箱。 这不仅效率低下,而且也不会按预期运行。 build议您尽可能使用int,只能使用Integer将这些值放入列表,容器或数据库存储中。 请记住,使用>,<和==来比较对象意味着与使用相同的运算符比较基元时不同。

不要只用它来循环。 使用原始typesint(更好的性能),它与Class Integer不一样。

Integer类在对象中包装基本typesint的值。 Integertypes的对象包含一个types为int的单个字段。

另外,这个类提供了几种将int转换为String和String的方法,以及处理int时的其他常量和方法。

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

您还需要使用Integer而不是int来表示generics

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

例如:

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

这里我们将string转换为一个整数(Primitivetypes),但方法parseInt(String str)只适用于包装类(即对象),所以我们使用它…你会发现在Java中使用它更多。

由于装箱和取消装箱,可能会造成性能损失,因为您会在原始types和引用types之间进行转换。

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

我通常使用整数因为纯粹的面向对象。 int的性能肯定比它的对象要好得多,但是只有在循环中循环数百万次时才会显着。

恕我直言,如果性能是最重要的在你的应用程序,你想挤甚至单纳秒然后使用int没有任何大脑。 但是,如果OO和可读性是主要关心,那么使用Integer。

始终在可能的地方促进原始types。

原始types不能用作GenericArgument或null。