Java “类型”是什么意思;盒装的;?

Java “类型”是什么意思;盒装的;?,java,types,terminology,type-systems,autoboxing,Java,Types,Terminology,Type Systems,Autoboxing,我听说在某些语言中,类型被称为“装箱” 在Java中,我听说过“自动装箱”。这是什么?它是否具有类型的包装器类?如果使用已装箱或未装箱的类型,代码将如何更改?某些数据类型被视为“原始”,这意味着它们没有被视为对象,也没有对象的属性 在大多数平台上,整数和字符是基本类型的示例,但可以装箱 装箱意味着将它们包装在一个对象中,以便它们具有对象的行为 确切的含义和行为取决于您使用的语言。有些语言(例如SimalTalk……至少在我做的时候,Waaay-Bead……)不允许任何原始类型,并认为所有的东西都

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


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

某些数据类型被视为“原始”,这意味着它们没有被视为对象,也没有对象的属性

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

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


确切的含义和行为取决于您使用的语言。有些语言(例如SimalTalk……至少在我做的时候,Waaay-Bead……)不允许任何原始类型,并认为所有的东西都是对象,但是有一个与此相关的性能损失,因为在一天结束的时候,处理器需要用原始数字和原始内存来做有用的工作。如果要添加两个已装箱的整数,例如,在幕后将它们“取消装箱”到基本类型中,则会添加数字,然后将其装箱回新整数。

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

通常,在处理集合时,处理的是对象数组。在Java等语言中,原语和对象之间存在差异。当一个原语被“装箱”时,它本质上只是一个围绕原语的包装器,因此它可以很好地处理框架中其他需要对象的部分


自动装箱只是将原语放入对象或透明地从对象中拉出原语的行为,这样您就不必担心自己执行此操作的额外步骤。

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

void foo(Object bar) {}
//...
    foo(1);
java会自动将int 1转换为整数。在以前的版本中,您必须执行以下操作:

foo(new Integer(1));

使用泛型时,自动装箱在java中最有用,因为您不能将原语与泛型一起使用,所以要在列表中存储int,您必须创建一个
列表
,并将int放入列表框中。

有关java的详细信息:

自动装箱允许java在大多数情况下自动将
boolean
int
等内容转换为它们的对象版本
boolean
Integer
。它还允许发生相反的情况

例如:

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
或将box
b
取消装箱到
整数。因此,应该调用哪个方法签名是不明确的。要解决此问题,您可以执行以下操作之一:

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

Boxed表示他们采用常规值类型并在其周围创建一个对象。有点像把它放在盒子里。这通常是要避免的,因为构建对象的开销很大。

精彩的演练和示例!