2012-05-16 52 views
46

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

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

可能的重复:** [int或Integer](http:// stackoverflow。com/a/423718/500725)** –

+0

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

+0

[int or Integer]可能的重复(http://stackoverflow.com/questions/423704/int-or-integer) –

回答

65

。在适当的情况下使用int,除非您特别需要以OO方式使用它;在这种情况下Integer是合适的。

Java Int vs Integer

但是,非常不同的东西都被窝里怎么回事。 int是一个数字; an> Integer是一个可以引用包含数字的对象的指针。

...

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

何时使用一个与其他更好的描述:

int和整数之间进行选择

我会如何将这些类型应该再进 详细的使用开始为什么。

  • 身高:int性能方面的原因
  • 中的方法采取的对象(包括通用类型,如List<T>) 将隐含要求使用整型的
  • 使用Integer是低值(-128〜 相对便宜127)因为国际化 - 使用Integer.valueOf(int)而不是新的 整数(int)
  • 请勿使用==!=整数类型
  • 考虑使用Integer当需要表示 不存在的值(零)的
  • 当心开箱整数值与零到int值
+2

您的回答非常好。请注意使用原始值的移动/资源受限应用程序的性能优势。 –

+0

“int不是一个对象,不能传递给需要对象的任何方法。” doSomething(911)怎么样? public Object doSomething(Object o){//做一些事情!!! return o; } –

34

如果您可以使用int这样做。如果该值可以是null或用作对象,例如仿制药,使用Integer

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

+0

也可以使用Integer#intValue(Integer)和Integer# valueOf(int)' – ametren

+0

我认为你的意思是'Integer.intValue()';)在Java 5.0中引入了自动装箱和拆箱功能,你不需要这样做。 –

+5

在很多情况下,'int'不仅执行*略微*,而且更好一些,尤其是在紧密循环中:) – dasblinkenlight

1

始终在可能的地方提升原始类型。

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

14

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

也使用Integer引入了一个额外的开箱和开箱费用。

3

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

1

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

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

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

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

您还需要使用整数不是int的仿制药等设置Integer类,这样的值可以在纯面向对象的方式装箱/拆箱名单

1

当有必要使用对象的,则必须使用包装类,像 整数,双精度浮点,等等

如:

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

在这里,我们将字符串转换为一个整数(原始类型), 但方法parseInt函数(字符串str)仅在包装类(即对象)的作品, 所以我们用它......你会发现更多的利用它在Java中。

1

可以有性能损失,由于装箱和拆箱,因为你承担一个原始和引用类型之间转换的开销。

然而,Integer类增加了额外的方法,可以是非常有用的。

0

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

恕我直言,如果性能是你的应用程序非常重要,你想挤进甚至单个纳米秒,随后使用int没有任何大脑。但是,如果OO和可读性是主要关注的话,那么使用Integer。