引入
Integer i = 11;
这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。
那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:
Integer i = 11; //装箱
int n = i; //拆箱
简单一点说,装箱是 自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
代码展示
public class Test {
public static void main(String[] args) {
/*int 和 int 类型之间进行比较,他们之间只能通过 == 进行对比,基本数据类型没有 equals 方法*/
int a = 128;
int b = 128;
System.out.println(a==b);
System.out.println("-----------------------");
/*int 和 integer 之间,integer 自动拆箱 == 和 equals 都为true*/
int c = 130;
Integer d= 130;
System.out.println(c == d);
System.out.println(d.equals(c));
System.out.println("-----------------------");
/*int 和 new integer 之间,integer 也会自动拆箱,== 和 equals 都为true*/
int aa = 130;
Integer bb = new Integer(130);
System.out.println(aa==bb);
System.out.println(bb.equals(aa));
System.out.println("-----------------------");
/*integer 和 integer 进行比较*/
/*这个号不同于我们前面的,两个integer的话,会自动装箱,这里有个注意的地方,就是如果值在【-128,127】之间的话
,由于值缓存在integercache中,不会再去创建新的对象,直接从缓存中获取已经创建好的对象。如果超出了这个范围,会
直接通过new 方法创建对象*/
/*因此如果通过 == 方法进行比较的时候,在【-128,127】之间的时候,为true 否则就是false*/
/*要是使用equals方法的话,比较内容 所以为true*/
Integer a1 = 126;
Integer a2 = 126;
System.out.println(a1 == a2);/*true*/
System.out.println(a1.equals(a2));/*true*/
System.out.println("integer 两个在范围内-----------------------");
Integer a11 = 128;
Integer a22= 128;
System.out.println(a11 == a22);/*false*/
System.out.println(a11.equals(a22));/*true*/
System.out.println("integer两个不在范围内-----------------------");
/*integer 和 new integer 进行比较*/
/*new integer 会创建对象,存储在堆中,integer的话,如果在【-128,127】之间的话,从缓存取出,否则new integer*/
/*通过 == 比较的话,肯定false ,equals肯定wei true*/
Integer cc = 126;
Integer dd = new Integer(126);
System.out.println(cc == dd);/*false*/
System.out.println(cc.equals(dd));/*true*/
System.out.println("integer 和 new integer-----------------------");
/*new integer 和 new integer 和上面的一个差不多,现在两个都需要通过new 创建对象,两个对象的地址不相同*/
/*==比较为false equals 比较为true*/
Integer mm = new Integer(129);
Integer nn = new Integer(129);
System.out.println(mm == nn);/*false*/
System.out.println(mm.equals(nn));/*true*/
System.out.println("new integer 和 new integer-----------------------");
/*下面的两个,一个是直接引用了,另一个则是还会新创建*/
Integer oo = mm;
System.out.println(mm == oo);/*true*/
System.out.println(mm.equals(oo));/*true*/
System.out.println("利用一个创建-----------------------");
Integer pp = new Integer(mm);
System.out.println(mm == pp);/*false*/
System.out.println(mm.equals(pp));/*true*/
System.out.println("利用一个新创建-----------------------");
}
}