java-说类型为“盒装”是什么意思?

我听说过某些类型的语言在某些语言中被称为“盒装”。

在Java中,我听说过“自动装箱”。 这是什么? 是否具有类型的包装器类? 如果使用装箱或拆箱类型,我的代码将如何更改?

6个解决方案
59 votes

一些数据类型被认为是“原始”的,这意味着它们不会像对象一样被对待,并且不具有对象的属性。

在大多数平台上,整数和字符是原始类型的示例,但可以装箱。

装箱意味着将它们包装在一个对象中,以便它们具有对象的行为。

确切的含义和行为取决于您使用的语言。 某些语言(例如Smalltalk ...至少在我做这件事时会回头...)不允许任何原始类型并将所有内容都视为对象,但是与此相关的性能损失是因为,最后 每天,处理器需要使用原始数字和原始内存来完成有用的工作。 例如,如果要添加两个已装箱的整数,则在幕后将它们“拆箱”为原始类型,将数字相加,然后将其装箱成新的整数。

Eric J. answered 2020-07-24T11:34:18Z
17 votes

有关Java的更多具体信息:

自动装箱允许Java在大多数情况下自动将诸如aint之类的内容自动转换为其对象版本bInteger。 它还允许反向发生。

例如:

int a = 3; // no boxing is happening
Integer b = 3;  // newer versions of java automatically convert the int 3 to Integer 3
int c = b;  // these same versions also automatically convert Integer 3 to int 3

没有自动装箱的Java的较旧版本将要求此代码执行相同的操作:

int a = 3;  // works the same
Integer b = new Integer(3);  //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive

但是,在某些情况下,您仍然必须手动执行操作。 例如,假设您有一个具有两个类似方法的类:

assertEquals(int a, int b);
assertEquals(Object a, Object b)

现在,如果你试着这样做:

Integer a = 3;
int b = 3;
assertEquals(a, b);  // this will not compile

这样做不起作用的原因是,它无法确定是将a取消装箱到int,还是将b取消装箱到Integer。因此,哪个方法签名应该是模棱两可的。 要解决此问题,您可以执行以下操作之一:

assertEquals((int) a, b);
assertEquals(a, (Integer) b);
TM. answered 2020-07-24T11:35:05Z
12 votes

是的,装箱意味着采用值类型并将其包装为引用类型。 由于Java引入了自动装箱,因此您可以执行以下操作:

void foo(Object bar) {}
//...
    foo(1);

Java会自动将int 1转换为Integer。 在以前的版本中,您必须执行以下操作:

foo(new Integer(1));

自动装箱在使用泛型时在Java中最有用,因为您不能将原始与泛型一起使用,因此要在列表中存储整数,则必须制作List<Integer>并将整数放入装箱的列表中。

sepp2k answered 2020-07-24T11:35:35Z
3 votes

盒装类型意味着这些值在堆上的一个块中分配,并通过指针引用。 这有利于实现运行时的统一性(使通用函数等更容易实现),但要付出额外的间接费用。

Pascal Cuoq answered 2020-07-24T11:35:55Z
1 votes

通常,当您使用集合时,您正在处理对象数组。 在Java之类的语言中,原语和对象之间是有区别的。 当一个原语被“装箱”时,它实际上只是一个原语的包装,因此它与期望对象的其余框架很好地配合。

自动装箱只是将图元放入对象中或将图元透明地从对象中拉出的动作,因此您不必担心自己要做的额外步骤。

MattC answered 2020-07-24T11:36:20Z
1 votes

Boxed表示他们采用了常规值类型并在其周围创建了一个对象。 有点像放在盒子里。 由于构造对象的开销,通常应避免这种情况。

Alex Baranosky answered 2020-07-24T11:36:41Z
translate from https://stackoverflow.com:/questions/1418296/what-does-it-mean-to-say-a-type-is-boxed