64

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

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

9 回答 9

98

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

Java 整数与整数

但是,这里的幕后正在发生非常不同的事情。int 是一个数字;an > Integer 是可以引用包含数字的对象的指针。

...

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

关于何时使用一个与另一个的更好描述:

在 int 和 Integer 之间进行选择

在详细说明原因之前,我将从如何使用这些类型开始。

  • int出于性能原因更喜欢
  • 采用对象的方法(包括泛型类型,如List<T>)将隐含地需要使用 Integer
  • Integer对于低值(-128 到 127),使用相对便宜,因为实习 - 使用Integer.valueOf(int)而不是 new Integer(int)
  • 不要使用==!=与整数类型一起使用
  • 考虑Integer在需要表示不存在值时使用(null)
  • 小心将整数值拆箱为具有空值的 int
于 2012-05-16T17:38:58.660 回答
42

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

通常,您使用哪一个并不重要,但通常int性能稍好一些。

于 2012-05-16T17:36:47.983 回答
17

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

使用还Integer引入了装箱和拆箱的额外开销。

于 2012-05-16T17:37:03.813 回答
5

这是在大型项目中等待发生的潜在灾难。这里的编码器忘记了每个 Integer 实际上是一个新对象,并且,要将其用作 int,必须一直进行装箱和拆箱。它不仅效率低下,而且也不会按预期运行。最好建议您始终尽可能使用 int,并且仅使用 Integer 将这些值放入列表、容器或用于数据库存储。请记住,使用 >、< 和 == 比较对象的含义与使用相同的运算符比较原语不同。

于 2012-05-16T17:38:24.337 回答
1

总是尽可能地提升原始类型。

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

于 2012-05-16T17:36:54.530 回答
1

不要只用它来循环。使用原始类型 int(性能更好),它与 Class Integer 不同。

Integer 类将原始类型 int 的值包装在一个对象中。Integer 类型的对象包含一个类型为 int 的字段。

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

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

对于 List 等泛型,您还需要使用 Integer 而不是 int

于 2012-05-16T17:38:54.060 回答
1

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

例如:

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

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

于 2012-05-16T17:40:10.830 回答
1

由于装箱和拆箱可能会导致性能损失,因为您会产生在原始类型和引用类型之间进行转换的开销。

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

于 2012-05-16T17:41:51.210 回答
0

由于纯粹的面向对象,我通常使用整数。int 的性能绝对比它的对应对象好得多,但只有当你在循环中循环数百万次时才会注意到它。

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

于 2015-05-17T08:38:07.447 回答