在java中如果可以使用Integer
代替int
而Integer
提供额外的功能,那么我的问题是为什么int
不被弃用,以及为什么{{1原始类型如此广泛使用?
答案 0 :(得分:4)
不推荐使用它的一个简单原因是 int 更快。虽然你可以使用两者,但是Integer
是一个更好的选择(有些人可能不同意,因为整数引入了拳击和拆箱的额外开销),因为它可以处理 null 。 int
null将变为0。
来自文档:
然而,这里有很多不同的事情。一个 int是一个数字;一个>整数是一个可以引用的指针 包含数字的对象。
...
int不是对象,不能传递给任何需要的方法 对象。一个常见的情况是使用提供的集合类( List,Map,Set) - 尽管可以编写这些版本 提供与对象版本类似功能的类。该 经常需要包装类(Integer,Double等) 每当使用内省时(例如在反射API中)。
编辑: - Joshua Bloch的理由也很好:
// Hideously slow program! Can you spot the object creation? public static void main(String[] args) {
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum); }
这个程序得到正确的答案,但由于一个字符,它比它应该慢得多 印刷错误。变量sum被声明为Long而不是 很长,这意味着程序构造大约2 ^ 31不必要 长实例(每次将长i添加到的时间大约为1 长款)。将总和声明从长到长更改会减少 我的机器上的运行时间从43秒到6.8秒。
同时检查此int versus Integer
答案 1 :(得分:3)
盒装类型的性能较差,需要更多内存,基元更快。并避免创建不必要的对象。
Integer
是一种不可变类型,一旦你创建了,就不能改变它,占用大量内存并且与int
答案 2 :(得分:1)
int是一个数字;整数是一个可以引用的指针 包含数字的对象。
int是基本类型。如果未设置,则指定的默认值为0.整数是一个可能包含int的对象。如果未设置Integer对象,则默认值为null
如果你可以使用int这样做。如果值可以是null
或用作对象,例如Generics
,使用整数
答案 3 :(得分:0)
int是一个集合构造。例如,只存在一个“int 10”并且是不可变的。另一方面,整数是包含int字段的完整类,有更多的方法并且很容易使用。
int表示速度,Integer表示多功能性。
答案 4 :(得分:0)
如果你有一个带有int作为参数的方法,你不必进行nullcheck,因为它是一个原始类型。