何为包装类
将原始类型和包装类分开以保持简单。当需要一个适合像面向对象编程的类型时就需要包装类。当希望数据类型变得简单时就使用原始类型。

原始类型不能为null,但包装类可以为null。包装类可用于实现多态性。

通俗的说,为啥要这个东西的存在呢?

首先,我们要知道,Java语言优势就是在于JVM的跨平台机制与面向对象语言的这两大优势。

Java是一个面向对象的编程语言,但是却有一个小小的不足,Java中的八种基本数据类型却是不面向对象的。

那既然不面向对象,就写一个类让这些类型面向对象,于是包装类诞生了。

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

包装类
为了方便记忆,除了Integer和Character类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。

对应如下

boolean —> Boolean
char —> Character
byte —> Byte
short —> Short
long —> Long
int —> Integer
float —> Float
double —> Double
如何装箱
public class Demo1 {
    public static void main(String[] args) {
        int a = 20;
        Integer i = Integer.valueOf(a);
        Integer j = a;
        System.out.println(a + " " + i + " " + j);
    }
}
首先,我们先定义一个对象,我们这里是int类型,那我们就直接使用了Integer i,定义了一个对象i,然后我们使用Integer类中的valueOf()方法将基本的int类型a转换成了对象i。

此时,这个i是一个对象,携带的int值为20。

但是,我们看看,给出的代码中还有一段,Integer j = a,是不是疑惑为什么他没有用valueOf()方法?

这是因为JDK自从1.5版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。

所以,他其实用了这个方法,只是你看不见罢了,我们称之为自动装箱。

输出的值也都一样。这里为了显示自动装箱,所以才去定义了valueOf()。

如何拆箱
public class WrapperExample2 {
    public static void main(String args[]) {
        Integer a = new Integer(3);
        int i = a.intValue();
        int j = a;
        System.out.println(a + " " + i + " " + j);
    }
}
拆箱就不多说,使用对象调用intValue()方法即可。

同时他也支持自动拆箱。

演示
public class Demo1 {
    public static void main(String[] args) {
        int a = 20;
        Integer i = Integer.valueOf(a);
        Integer j = a;
        System.out.println("装箱"+i);
        System.out.println("自动装箱"+j);
 
        //对上面的j进行拆箱
        int x = j.intValue();
        int y = j;
        System.out.println("拆箱"+i);
        System.out.println("自动拆箱"+j);
    }
}
 
运行结果如下: