我遇到了一个使用整数变量来捕获要在 for 循环中使用的大小的类。这是一种好的做法还是我们应该使用 int 原始数据类型?
Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j)
提供了 Integer 类,以便可以以纯 OO 方式对值进行装箱/拆箱。在适当的情况下使用 int ,除非您特别需要以 OO 方式使用它;在这种情况下,整数是合适的。
但是,这里的幕后正在发生非常不同的事情。int 是一个数字;an > Integer 是可以引用包含数字的对象的指针。
...
int 不是对象,不能传递给任何需要对象的方法。一个常见的情况是使用提供的集合类( List 、 Map 、 Set )——尽管可以编写这些类的版本来提供与对象版本类似的功能。每当使用自省(例如在反射 API 中)时,经常需要包装类( Integer 、 Double 等)。
关于何时使用一个与另一个的更好描述:
在 int 和 Integer 之间进行选择
在详细说明原因之前,我将从如何使用这些类型开始。
int
出于性能原因更喜欢- 采用对象的方法(包括泛型类型,如
List<T>
)将隐含地需要使用 IntegerInteger
对于低值(-128 到 127),使用相对便宜,因为实习 - 使用Integer.valueOf(int)
而不是 new Integer(int)- 不要使用
==
或!=
与整数类型一起使用- 考虑
Integer
在需要表示不存在值时使用(null)- 小心将整数值拆箱为具有空值的 int
如果可以使用int
,请这样做。如果该值可以null
或用作对象,例如泛型,请使用Integer
通常,您使用哪一个并不重要,但通常int
性能稍好一些。
这种方法在实践中并不好,int
尽可能使用。的用法Integer
表明这个特定的变量可以是null
(或者它在一个集合中,该死的泛型......) - 事实并非如此。
使用还Integer
引入了装箱和拆箱的额外开销。
这是在大型项目中等待发生的潜在灾难。这里的编码器忘记了每个 Integer 实际上是一个新对象,并且,要将其用作 int,必须一直进行装箱和拆箱。它不仅效率低下,而且也不会按预期运行。最好建议您始终尽可能使用 int,并且仅使用 Integer 将这些值放入列表、容器或用于数据库存储。请记住,使用 >、< 和 == 比较对象的含义与使用相同的运算符比较原语不同。
总是尽可能地提升原始类型。
原始类型不能用作 GenericArgument 或 null。
不要只用它来循环。使用原始类型 int(性能更好),它与 Class Integer 不同。
Integer 类将原始类型 int 的值包装在一个对象中。Integer 类型的对象包含一个类型为 int 的字段。
此外,该类提供了几种将 int 转换为 String 和 String 转换为 int 的方法,以及在处理 int 时有用的其他常量和方法。
因此,如果您需要调用 Integer 函数或需要为其分配空值,请使用 Integer。
对于 List 等泛型,您还需要使用 Integer 而不是 int
当需要使用对象时,您必须使用 Wrapper 类,如 Integer、Double、Float 等...
例如:
int n = Integer.parseInt("10");
这里我们将字符串转换为整数(原始类型),但方法 parseInt(String str) 仅适用于 Wrapper 类(即 Object),因此我们使用了它......你会发现它在 java 中的更多用途。
由于装箱和拆箱可能会导致性能损失,因为您会产生在原始类型和引用类型之间进行转换的开销。
但是,Integer 类添加了非常有用的其他方法。
由于纯粹的面向对象,我通常使用整数。int 的性能绝对比它的对应对象好得多,但只有当你在循环中循环数百万次时才会注意到它。
恕我直言,如果性能在您的应用程序中至关重要,并且您甚至想压缩一纳秒,那么请使用 int 而无需任何大脑。但是,如果主要关注 OO 和可读性,则使用 Integer。