添加链接描述(大神详解)
以下是我拜读大神的详解之后的内容摘要:
自动装箱:装箱就是自动将基本数据类型转换为包装器类型,如
Integer total = 99;
自动拆箱:拆箱就是自动将包装器类型转换为基本数据类型,如
int totalprim = total;
基本数据类型与对应的包装器类型:
举例:Integer a = int b
当b在[-128,128)时,会创建一个固有的new Integer()(缓存中),否则会创建一个全新的new Integer()(JVM堆中)
int i00=127;
Integer i01=new Integer(127);
System.out.println(i00==i01);
int i1=128;
Integer i2 = new Integer(128);
System.out.println(i1==i2);
Integer i3 = new Integer(127);
Integer i4 = new Integer(127);
System.out.println(i3==i4);
System.out.println("*****"+i3.equals(i4));
Integer i5=127;
Integer i6 =Integer.valueOf(127);
System.out.println(i5==i6);
Integer i05 = 130;
Integer i06 = Integer.valueOf(130);
System.out.println(i05==i06);
System.out.println("*****"+i05.equals(i06));
int i7=10000;
Integer i8=new Integer(10000);
System.out.println(i7==i8);
输出:true
true
false
*****true
true
false
*****true
true
本例中:当一个基础数据类型与封装类进行"== 和 加减乘除"运算时,会将封装类进行拆箱,对基础数据类型进行运算。
封装类进行 加减乘除 运算时,首先会进行自动拆箱成基本数据类型
1)对于==,比较的是值是否相等
(a)如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
(b)如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。