Java是一种面向对象的编程语言,在它庞大的语言家族当中,却存在着几个异类(byte、short、int、long、float、double、char、boolean),它们不能像对象一样进行属性和方法的调用以及相互之间的对象化处理。包装类的存在就是为了解决这些异类所产生的问题,让它们能够像对象一样进行交互。
我们都知道Java中的数据类型可以分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象的特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化的交互。为了解决这样的问题于是就产生了包装类,通过包装类就可以使基本数据类型获取对象一样的特征,行使对象的相关权益。
下面是Java当中的基本数据类型与它的包装类的对应关系:
Java当中所有的包装类都是存放在java.lang包下的,所有的包装类都是由final修饰的,也就是说包装类是没有子类的,是不能被继承的。基本数据类型被分为三大类:数值型(byte、short、int、long、float、double)、字符型(char)、布尔型(boolean)其中数值型所对应的包装类全都是继承自Number类,而字符型和布尔型所对应的包装类继承自Object类。
包装类与基本数据类型之间的转换
提到包装类与基本数据类型之间的转换就要引入两个概念装箱、拆箱,所谓**“装箱”就是将基本数据类型的值转换为对应包装类的对象;“拆箱”就是将包装类的对象转换为对应的基本数据类型的值。无论是装箱还是拆箱都有两种操作方式“自动”和“手动”。**
下面以int类型和它所对应的包装类Integer来进行操作演示:
package com.jinglan.wrap;
public class WrapTestOne {
public static void main(String[] args) {
//装箱:把基本数据类型的值转换成对应包装类的对象
//1、自动装箱
int t1 = 2;//定义一个整型的变量t1将它赋值为2
Integer t2 = t1;//定义一个Integer对象t2,直接将t1的值赋值给t2。编译器会将t1中的数据提取出来,通过实例化的方式构成t2对象。
System.out.println("int类型t1="+t1);
//如果成功装箱t2的值应该就等于t1
System.out.println("自动装箱后Integer类型t2="+t2);
//2、手动装箱
Integer t3 = new Integer(t1);//通过new关键字在构造函数中把整型变量t1的值传给t3,用t1的值构造t3对象
//在语句中直接输出对象名的时候,默认会调用对象的toString方法
//在Integer类中,它的toString方法返回的就是其中所包含的数据值。
System.out.println("手动装箱后Integer对象t3="+t3);
System.out.println("=============我是分隔符===============");
//拆箱:把包装类的对象转换成对应的基本数据类型的值
//1、自动拆箱
//所谓自动拆箱是指,我们可以把一个Integer类型的对象通过赋值符号直接赋值给整型变量
//编译器会自动将包装类中存储的数据值提取出来赋值给整型变量
int t4 = t2;//把Integer类型的对象t2通过赋值符号直接赋值给整型变量t4
System.out.println("Integer对象t2="+t2);
System.out.println("经过自动拆箱之后t4="+t4);
//2、手动拆箱(调用方法 intValue方法)//intValue()将Integer包装类对象转换成基本数据类型int值
int t5 = t2.intValue();
System.out.println("经过手动拆箱后t5="+t5);
}
}