自动装箱与拆箱
什么是装箱?
装箱:将基本类型用它们对应的引用类型包装起来;
Integer a = 10; //装箱
//这个过程中会自动根据数值创建对应的 Integer对象
那什么是拆箱呢?
拆箱:将包装类型转换为基本数据类型;
顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:
Integer i = 10;
int a = i; //拆箱
//拆箱就是自动将包装器类型转换为基本数据类型。
int 和 Integer 有什么区别
Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型。
为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class)。
Java 为每个原始类型提供了包装类型
所以来说,
装箱就是把基础类型封装成一个类。
比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了。
拆箱就是把类转换成基础类型。
比如你算个加法什么的是不能用类的,就得把它转换成基本类型.
ps:jdk5以后可以自动转换。
Integer a= 127 与 Integer b = 127相等吗
- 对于对象引用类型:==比较的是对象的内存地址。
- 对于基本数据类型:==比较的是值。
因此,
如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用常量池中的Integer对象,超过范围 a1==b1的结果是false
举个栗子:
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false
//两个引用没有引用同一对象
System.out.println(a == c); // true
//a自动拆箱成int类型再和c比较
System.out.println(b == c); // true
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1); // false
Integer a2 = 127;
Integer b2 = 127;
System.out.println(a2 == b2); // true
}