我遇到一个使用Integer变量的类来捕获要在for循环中使用的大小。这是一个好的做法还是我们应该使用int原始数据类型?
Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j)
答案 0 :(得分:77)
提供了Integer类,以便可以以纯OO方式对值进行装箱/取消装箱。除非您特别需要以OO方式使用它,否则请在适当的地方使用int;在这种情况下,整数是合适的。
然而,这里有很多不同的事情。 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)
这种方法在实践中并不好,尽可能使用int
。 Integer
的用法表示此特定变量可以是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。