Autoboxing:所以我可以写:Integer i = 0; 而不是:Integer i = new Integer(0);

Har*_*nce 10 java autoboxing

Autoboxing似乎归结为我可以写:

Integer i = 0; 
Run Code Online (Sandbox Code Playgroud)

代替:

Integer i = new Integer(0);
Run Code Online (Sandbox Code Playgroud)

因此,编译器可以自动将基元转换为Object.

这是个主意吗?为什么这很重要?

Bri*_*aro 16

你有点简化了它.

使用集合时,自动装箱也会发挥作用.正如sun的java文档中所解释的那样:

集合只能保存对象引用,因此您必须将原始值装入适当的包装类中....当您从集合中取出对象时,您将获得放入的整数; 如果需要int,则必须使用intValue方法取消对Integer的装箱.所有这些装箱和拆箱都是一种痛苦,并使你的代码变得混乱.自动装箱和拆箱功能可自动完成整个过程,消除痛苦和杂乱.

那么什么时候应该使用自动装箱和拆箱?仅在引用类型和基元之间存在"阻抗不匹配"时才使用它们,例如,当您必须将数值放入集合时.将自动装箱和拆箱用于科学计算或其他对性能敏感的数字代码是不合适的.Integer不能替代int; autoboxing和unboxing模糊了原始类型和引用类型之间的区别,但它们并没有消除它.

Autoboxing的精彩概述


Pet*_*rey 8

BTW

Integer i = 0;
Run Code Online (Sandbox Code Playgroud)

相当于

Integer i = Integer.valueOf(0);
Run Code Online (Sandbox Code Playgroud)

区别在于valueOf()不为-128和127之间的值创建新对象(显然,如果Java 6u14,这将是可调的)


sta*_*lue 5

它存在,所以你可以编写像

List<Integer> is = new ArrayList<Integer>();
is.add(1); // auto-boxing
is.add(2);
is.add(3);

int sum = 0;
for (int i : is)  // auto-unboxing
{
    sum += i;
}
Run Code Online (Sandbox Code Playgroud)

对于单个整数,您应该默认使用int类型,而不是Integer.整数主要用于集合.

请注意,Long与Integer的值相同(使用equals()),但是长度等于int(使用==).