深入剖析Java中的装箱和拆箱
作者:网络转载 发布时间:[ 2014/6/17 13:31:11 ] 推荐标签:Java 软件开发
自动装箱和拆箱问题是Java中一个老生常谈的问题了,我们来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。
以下是本文的目录大纲:
一.什么是装箱?什么是拆箱?
二.装箱和拆箱是如何实现的
三.面试中相关的问题
一.什么是装箱?什么是拆箱?
在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);
而在从Java SE5开始提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样可以了:
Integer i = 10;
这个过程中会自动根据数值创建对应的 Integer对象,这是装箱。
那什么是拆箱呢?顾名思义,跟装箱对应,是自动将包装器类型转换为基本数据类型:
Integer i = 10; //装箱
int n = i; //拆箱
简单一点说,装箱是 自动将基本数据类型转换为包装器类型;拆箱是 自动将包装器类型转换为基本数据类型。
下表是基本数据类型对应的包装器类型:
|
int(4字节)Integer
byte(1字节)Byte
short(2字节)Short
long(8字节)Long
float(4字节)Float
double(8字节)Double
char(2字节)Character
boolean(未定)Boolean
|
二.装箱和拆箱是如何实现的
上一小节了解装箱的基本概念之后,这一小节来了解一下装箱和拆箱是如何实现的。
我们以Interger类为例,下面看一段代码:
|
public class Main {
public static void main(String[] args) {
Integer i = 10;
int n = i;
}
}
|
反编译class文件之后得到如下内容:


sales@spasvo.com