Java语言的包装类

一.为什么要有包装类:

基本数据类型不能有对象属性,基本数据类型不能有方法的调用。

二.基本数据类型对应的包装类

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类型,之后就是基本数据类型使用==比较值是否相等。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值