为什么在Java中不推荐int基元类型

为什么在Java中不推荐int基元类型,java,integer,int,Java,Integer,Int,在java中,如果可以使用Integer来代替int并且Integer提供了额外的特性,那么我的问题是为什么int没有被弃用,为什么int基元类型被如此广泛地使用?盒装类型的性能较差,需要更多的内存,基元速度更快。并避免创建不必要的对象 Integer是一种不可变的类型,一旦创建,您就无法更改它,与int相比,它占用了大量内存和较高的开销int一个不被弃用的简单原因是int更快。虽然您可以同时使用这两种方法,但是Integer是一个更好的选择(有些人可能不同意,因为Integer会增加装箱和取消

在java中,如果可以使用
Integer
来代替
int
并且
Integer
提供了额外的特性,那么我的问题是为什么
int
没有被弃用,为什么
int
基元类型被如此广泛地使用?

盒装类型的性能较差,需要更多的内存,基元速度更快。并避免创建不必要的对象


Integer
是一种不可变的类型,一旦创建,您就无法更改它,与
int

相比,它占用了大量内存和较高的开销int

一个不被弃用的简单原因是int更快。虽然您可以同时使用这两种方法,但是
Integer
是一个更好的选择(有些人可能不同意,因为Integer会增加装箱和取消装箱的额外开销),因为它可以处理null
int
null将变为0

从文档中:

然而,在这里,非常不同的事情正在被掩盖。一 int是一个数字;>整数是可以引用 包含数字的对象

int不是对象,不能传递给任何需要 物体。常见的情况是使用提供的集合类( 列表、映射、集合)-尽管可以编写这些的版本 类提供与对象版本类似的功能。这个 通常需要包装类(整数、双精度等) 无论何时使用内省(例如在反射API中)

编辑:-约书亚·布洛赫的理由也很好:

// 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); } 
//程序慢得可怕!你能发现物体的产生吗?公共静态void main(字符串[]args){
长和=0L;
用于(长i=0;i
这个程序得到了正确的答案,但由于只有一个字符,它的速度比应该的慢得多 印刷错误。变量sum被声明为Long而不是 长,这意味着程序构造大约2^31 长实例(每次将长i添加到 长和)。将总和声明从Long更改为Long可减少 在我的机器上,运行时间从43秒缩短到6.8秒

也检查一下这个

整数是一个数字;整数是可以引用 包含数字的对象

  • int是一种基本类型。如果未设置,则指定的默认值为0。Integer是可能包含int的对象。如果未设置Integer对象,则默认值为null

  • 如果可以使用int,请执行此操作。如果该值可以是
    null
    或用作对象,例如
    泛型
    ,请使用整数


整数是一个集合结构。例如,只有一个“int10”存在并且是不可变的。另一方面,整数是完整的类,其中包含一个int字段,有更多的方法,并且是可修改的


int表示速度,Integer表示通用性。

如果您有一个以int作为参数的方法,您不必进行nullcheck,因为它是primitve类型。

int不是对象,不能传递给任何需要对象的方法。
我同意这一点,可能会出现相反的情况,所以为什么不将
int弃用
?您可能喜欢考虑用户提交表单的情况,并且不为int提供任何值。默认情况下,您将得到0。当该字段在数据库中不为null时,这是有意义的,但谁知道您可能会重构您的表,使其可为null。@pronox:-还可以总结点对象提供多态性工具,通过引用传递,并从堆中分配。相反,原语是按值传递的不可变类型,通常从堆栈中分配。