一.基本类型包装类
1.概述
因为需要更方便的使用基本数据类型,所以我们将基本数据类型封装成类
2.基本数据类型对应的包装类
3.装箱与拆箱
概念
装箱就是自动将基本数据类型转换为包装器类型
拆箱就是自动将包装器类型转换为基本数据类型
在java1.5之前是没有自动装箱和拆箱的
Integer i = new Integer(66);//1.5之前必须这么写
例子:
Integer i = 10; //装箱
int n = i; //拆箱
二.深入理解装箱与拆箱
1.装箱与拆箱是怎么实现的
源码:
public class Test01 {
public static void main(String[] args) throws Exception {
Integer i = 10;
int j = i;
}
}
首先看反编译后的结果
public class Test01 {
public static void main(String[] args) throws Exception {
Integer i = Integer.valueOf(10);
int j = i.intValue();
}
}
可以得出结论:
装箱的时候会自动调用valueOf方法
拆箱的时候会自动调用intValue方法
其他的类型也同理
2.自动装箱与拆箱需要注意的点
通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象,注意double和float类型不是,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的
Integer i = new Integer(xxx)和Integer i =xxx的区别,第一种方式不会触发自动装箱,第二种会;第二种执行效率高
== 比较的是两个包装类型的引用,但是如果==的两侧出现运算符号则比较的是内容(触发了自动拆箱),如果用到了equals,那么会先触发自动拆箱,然后再自动装箱
率高
== 比较的是两个包装类型的引用,但是如果==的两侧出现运算符号则比较的是内容(触发了自动拆箱),如果用到了equals,那么会先触发自动拆箱,然后再自动装箱