登陆 / 注册
JAVA 学习手册 展开/折叠

包装类

阅读数:5

为什么需要包装类?

java 中 new 一个对象,会把这个对象存储在堆里面,所有的类都是 object 的子类,通过 stack 指向堆。

java 中的对象很多都是朝生夕死的,所以一直放在堆中不是很高效; 

Java 是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,为了使用方便和解决这个不足,

在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类

均位于java.lang包。包装类(如我们在使用集合类型 Collection 时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装

起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。


基本数据类型及对应的包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

不同

声明方式不同:基本类型不使用 new 关键字,而包装类型需要使用 new 关键字来在堆中分配存储空间;

存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;

初始值不同:基本类型的初始值如 int 为 0,boolean 为 false,而包装类型的初始值为 null ;

使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如 Collection、Map 时会使用到。每个包装类的对象可以封装一个

相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。


基本类型和对应的包装类可以相互装换:

由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;

public class WrapperExample1{  
	public static void main(String args[]){  
		int a=20;  
		Integer i=Integer.valueOf(a);//装箱,将int转换为Integer
		Integer j=a;//自动装箱,现在编译器将在内部编写Integer.valueOf(a)
		 
		System.out.println(a+" "+i+" "+j);  
	}
}

运行以上示例,输出如下结果:

20 20 20


包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。

public class WrapperExample2{    
	public static void main(String args[]){    
		Integer a=new Integer(3);    
		int i=a.intValue();//拆箱,将Integer转换为int
		int j=a;//自动拆箱, 现在编译器将在内部编写a.intValue()
			
		System.out.println(a+" "+i+" "+j);    
	}
}

运行以上示例,输出如下结果:

3 3 3


在jdk1.5之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书

写。

例如:

public class Demo {
	public static void main(String[] args) {
		int m = 500;
		Integer obj = m; // 自动装箱
		int n = obj; // 自动拆箱
		System.out.println("n = " + n);
		Integer obj1 = 500;
		System.out.println("obj 是否等价于 obj1:" + obj.equals(obj1));
	}
}

运行以上示例,输出如下结果:

n=500
obj 是否等价于 obj1:true


微信扫码登陆