说一个类型是“盒装的”是啥意思?

Posted

技术标签:

【中文标题】说一个类型是“盒装的”是啥意思?【英文标题】:What does it mean to say a type is "boxed"?说一个类型是“盒装的”是什么意思? 【发布时间】:2010-11-27 22:41:57 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

Java 的更多具体信息:

在大多数情况下,自动装箱允许 java 自动将 booleanint 等对象版本转换为 BooleanInteger。它还允许相反的情况发生。

例如:

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);

【讨论】:

很棒的演练和例子!【参考方案2】:

盒装意味着他们采用常规值类型并围绕它创建一个对象。有点像把它放在一个盒子里。由于构造对象的开销,这通常是要避免的。

【讨论】:

【参考方案3】:

是的,装箱意味着采用值类型并将其包装在引用类型中。由于java引入了自动装箱,你可以这样做:

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

而且java会自动把int 1变成Integer。在以前的版本中,您必须这样做:

foo(new Integer(1));

在使用泛型时,自动装箱在 java 中最有用,因为您不能将基元与泛型一起使用,因此要将 int 存储在列表中,您必须创建一个 List<Integer> 并将 int 放入装箱的列表中.

【讨论】:

【参考方案4】:

通常,当您使用集合时,您处理的是对象数组。在像 Java 这样的语言中,原语和对象之间是有区别的。当一个基元被“装箱”时,它本质上只是一个基元的包装器,因此它可以很好地与框架的其余部分期待一个对象。

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

【讨论】:

【参考方案5】:

装箱类型意味着值在堆上的一个块中分配并通过指针引用。这有利于实现运行时的统一性(它使具有通用函数等变得更容易),但代价是额外的间接。

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

以上是关于说一个类型是“盒装的”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 200中数据字典表具体说啥,意思是啥?Itemtype\ItemValue\Itemname啥意思??急

“语义正确”是啥意思?

java中 Integer是啥意思

VB: ByVal是啥意思

sql server的元素类型int identity(1,1)是啥意思?

Java里的包,类,接口,枚举是啥意思