这是什么意思是说一个类型是“盒装”?

我听说过的类型被提及的一些语言的“盒装”。

在Java中,我听到“自动装箱”的。 这是什么? 难道有一个类型的包装类? 如何将我的代码更改,如果我正与盒装或装箱类型?

--------------解决方案-------------

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

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

拳击意味着它们包装在一个对象,这样他们有一个对象的行为。

的确切含义和行为取决于你所使用的语言。 有些语言(如Smalltalk ......至少我是这样做...... waaay回)不允许任何原始类型,并考虑一切是一个对象,但有与之相关的性能损失,因为,在结束当天,处理器需要工作用原始数据和原始内存做无用功。 如果你想补充一点,已装箱两个整数,例如,他们的背后是“拆箱”为基本类型的场景,这些数字相加,和他们然后装箱回到一个新的整数。

是的,拳指取一个值类型和包装它引用类型。 由于Java引入了自动装箱,你可以这样做:

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

和Java会自动打开INT 1到一个整数。 在以前的版本中,你不得不做的:

foo(new Integer(1));

在Java泛型工作时,自动装箱是最有用的,因为你不能使用原语与仿制药,所以要在列表中存储整数,你就必须做一个List<Integer>把整数变成盒装的列表。

装箱的类型意味着价值被分配在堆块,并通过一个指针引用。 这是很好的均匀性,在运行时的执行(它可以更容易有泛型函数等),在额外的间接成本。

对于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

这不工作的原因是因为它无法弄清楚它是否应该拆箱aint或盒子b到一个Integer 。 因此,这是不明确哪些方法签名应该被调用。 为了解决这个问题,你可以执行下列操作之一:

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

一般来说,当你的工作与收藏,你处理的对象的数组。 在像Java语言,有一个原语和对象之间的差异。 当一个原始的“盒装”,它本质上只是一个围绕一个基本类型的包装,因此起到很好的与该公司预计,对象框架的其余部分。

自动装箱是把一个基本成一个对象或拉原始出物体的透明的,所以你不必担心做自己的额外的步骤,只是行为。

盒装意味着他们是正规值类型和周围创建的对象。 有点像把它放在一个盒子里。 这通常是要避免的,因为构造对象的开销。

分类:java的 时间:2015-03-16 人气:10
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.617 (s). 10 q(s)