一.为什么要有包装类:
基本数据类型不能有对象属性,基本数据类型不能有方法的调用。
二.基本数据类型对应的包装类
byte-----------> Byte
short----------> Short
int-------------> Integer
long-----------> Long
float-----------> Float
double--------> Double
char-----------> Character
boolean---------> Boolean
三.128陷阱(面试重点)
我们使用Integer定义的数据会进行自动装箱,自动装箱调用valueOf()方法,该方法会判断我们的入参是否在-128-127之间,如果在这个区间之间,则会返回一个已经存在的对象的地址(该对象在catch数组当中,catch数组是一个从-128-127的数组),不会重新创建对象,否则会重新创建对象,并返回新对象的地址。
让我们来猜猜下面代码的输出结果:
Integer i=127;
Integer j=127;
System.out.println(i == j);
Integer k = 128;
Integer l = 128;
System.out.println(k == l);
结果是true和false。128超出了catch数组的范围,所以k和l存的地址是不同的。
四.包装类的自动拆装箱
自动装箱:基本数据类型-------->包装类
自动拆箱:包装类---------->基本数据类型
因为有自动拆装箱的存在,包装类定义的数据和基本数据类型可以相互转换。
Integer m = 10;//自动装箱 Integer m= Integer.value0f(10);
int a = m;//自动拆箱 int a = m.intValue();
让我们猜猜下面代码的输出结果是什么:
int a =10;
int b =10;
Integer a1 = 10;
Integer b1 = 10;
Integer a2 = new Integer( value: 10);
Integer b2 = new Integer( value: 10);
System.out.println(a == b);//1.T
System.out.println(a1 == b1);//2.T
System.out.println(a2 == b2);//3.F
System.out.println(a1 == a);//4.T
System.out.println(a1.equals(a));//5.T
System.out.println(a1==a2);//6.F
System.out.println(a== a2);//7.T
结果已经用注释标记好了。接下来解释一下原因:
1.基本数据类型==比较数值。
2.10在-128---127之间,所以a1和b1的地址相同。
3.a2和b2都是各自用new开辟了一块新的内存空间,所以地址不同。
4.这里Integer类型的a1会自动拆箱,转换成int类型,之后就是基本数据类型使用==比较值是否相等。
5.同理,这里Integer类型的a1会自动拆箱,转换成int类型,之后就是基本数据类型使用==比较值是否相等。
6.这是两个Integer对象,两个对象的地址不同,因为其中一个使用new开辟了一块新的内存空间。
7.这里Integer类型的a2会自动拆箱,转换成int类型,之后就是基本数据类型使用==比较值是否相等。
1501

被折叠的 条评论
为什么被折叠?



