一、基本介绍
包装类的作用: Java 语言中,一切都是对象,但是有例外: 8 个基本数据类型不是对象,因此在很多时候非常不方便。为此,Java提供为 8 个基本类型提供了对应的包装类:
基本数据类型 | 包装类 |
---|---|
int(4字节) | Integer |
byte(1字节) | Byte |
short(2字节) | Short |
long(8字节) | Long |
float(4字节) | Float |
double(8字节) | Double |
char(2字节) | Character |
boolean(未定) | Boolean |
- 自动装箱 : 当我们把一个基本类型的值( 20),赋值给引用变量时候,系统可以 自动将它“包装”为相应的包装类的实例程序需要对象时,如果给的只是一个基本类型的值,系统会将它自动装箱为包装类的实例达到的效果:有了自动装箱之后,基本类型的值可以当成对象用—— 其实是【假相】 。
- 自动拆箱: 当我们需要一个基本类型的值时,但实际上传入的包装类的对象。系 统会自动把对象“剥”开,得到它的值。达到的效果:有了自动拆箱之后,包装类的对象可当成基本类型的值 用——其实是【假相】 。
自动装箱 ----- 基本类型的值 → 包装类的实例
自动拆箱 ----- 基本类型的值 ← 包装类的实例
事实上,包装类比基本类型更好用——基本类型能做的事情,包装类也能做。但包装类能做的,基本类型不一定能做,比如要赋一个 null 值。
二、装箱和拆箱是如何实现的
public class Main {
public static void main(String[] args) {
Integer i = 10;//装箱
int n = i;//拆箱
}
}
反编译为:
package com.mao.a_box;
public class Test01
{
public Test01()
{
}
public static void main(String args[])
{
Integer i = Integer.valueOf(10);
int n = i.intValue();
}
}
从反编译得到的字节码内容可以看出,在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Inte