本文目录一览:
java包装类怎样理解?装箱与拆箱又怎样理解?请通俗的解释一下,举个例子也行
Java有一个类型系统有两个部分组成,包含基本类型(byte
、char
、int
、short
、long
、float
、double
、boolean
)和引用类型。而基本类型则对应着各自的引用类型,称为装箱的基本类型。而引用类型对应着各自的基本类型,称为拆箱的基本类型。对应的类型为:(Byte
、Character
、Integer
、Short
、Long
、Float
、Double
、Boolean
)
下面用具体例子来说明装箱与拆箱:
// Java 1.5之前创建一个Integer对象
Integer i = new Integer(10);
// Java 1.5之后有了装箱的特性,直接用下列方式生成一个Integer对象
// 在这个过程中会将int类型的10自动装箱成为Integer类型
Integer i = 10;
// 拆箱,输出的值为20,这个过程中,会先将Integer类型的j自动拆箱为基本类型的10,最后完成运算
Integer j = new Integer(10);
int k = 10;
System.out.print(j + k);
java 包装类 自动装箱问题
Java包装类,Wrapper。由于在Java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,所以对于要将数据类型作为对象来使用的情况,Java提供了相对应的包装类。对于8种数据类型的包装类分别是:
int
→Integer
char
→Character
float
→Float
double
→Double
byte
→Byte
short
→Short
long
→Long
boolean
→Boolean
所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int
型包装成Integer
类的对象,或者把double
包装成Double
等。 所谓拆箱,就是跟装箱的方向相反,将Integer
及Double
这样的引用类型的对象重新简化为值类型的数据。 J2SE 5.0后提供了自动装箱与拆箱的功能,此功能事实上是编译器来帮您的忙,编译器在编译时期依您所编写的方法,决定是否进行装箱或拆箱动作。 自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。 自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()
和doubleValue()
方法。 自动装箱,只需将该值赋给一个类型包装器引用,Java会自动创建一个对象。例如:
Integer i = 100; // 没有通过使用new来显示建立,Java自动完成。
自动拆箱,只需将该对象值赋给一个基本类型即可。例如:
int j = i;
手动装箱和拆箱示例:
int i = 10;
Integer j = new Integer(i); // 手动装箱操作
int k = j.intValue(); // 手动拆箱操作
自动装箱和拆箱示例:
int i = 11;
Integer j = i; // 自动装箱
int k = j; // 自动拆箱
java 为什么要有装箱和拆箱?
把一个基本类型包装成一个类,一个是可以使这个类型具有很多可以调用的方法。二是Java向面向对象语言的靠近。其实Java还不算是很纯的面向对象的语言。真正的面向对象,是没有基本数据类型的。它只有一种类型,就是对象。三是泛型中,基本类型是不可以做泛型参数的。例如:List<int>
list = new ArrayList<int>
(); 这是不合法的。你只能这样写:List<Integer>
list = new ArrayList<Integer>
();,也就是要用
int`型的包装类类型来解决基本类型不可以做泛型参数的问题。
一句话,包装类有更多的方法和用途,而这是基本类型没有的!!!