首先为什么要在Java语言中引入包装类呢,先前学C语言的时候好像没有讲过这个概念。答案是Java是一个面向对象的高级语言,它需要面向对象编程,也就需要各种各样的类,而我们的几种基本数据类型只有引入了包装类(对应的引用类型),它们才能变成我们熟知的对象使用各种各样的方法,Java中的类才足够完整,Java才是真正的面向对象。
下面给出Java中对基本数据类型的包装类:
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
可以看出除了int和char的包装类是对字母进行了添加,其他的包装类都只是将首字母变为大写,这也让我们更加好记忆。
下面给出使用包装类的例子:
int i = 1;
Integer t = new Integer(i);
String s = t.toString(); // s = “1“,t是类,可以调用toString方法
实际上这是一个装箱的过程,装箱:包装类使得一个基本数据类型的数据变成了类。有了类的特点,可以调用类中的方法。
那么相应的我们也就得到了拆箱的概念
拆箱:将数字包装类中内容变为基本数据类型。
举例:
int j = t.intValue(); // j = 1,intValue取出包装类中的数据
那么什么又是自动装箱、拆箱呢?从上述例子我们看到,要想将int i 装箱,我们需要手动去new一个Integer的对象,比较麻烦,而从JDK1.5之后,JDK支持自动装箱,自动拆箱,但类型必须匹配。
举例:
Integer i=1;//自动装箱
int a=i; //自动拆箱
由此给出概念:
自动装箱:就是将基本数据类型自动转换为对应的包装类;
自动拆箱:就是将包装类自动转换为基本数据类型:
但需要特别注意的是,当包装对象的数值进行比较时,不能简单的使用==来进行判断,当该对象的数值在没溢出时,其可以进行比较,溢出的话我们就应该使用equals进行比较,否则会得到与实际不相符合的结果。
举例:
Integer a=128;
Integer b=128;
System.out.println(a==b);//false
System.out.println(a.equals(b));//true