使用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
会稍微好一些。
这种做法在实践中并不好,尽可能使用int
。 Integer
用法表示这个特定的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。