拆箱装箱有什么作用JAVA_基础--最简单明了的拆箱装箱解释,带实例

前言

在JAVA中,拆箱和装箱操作是发生在基本数据类型和其包装类之间的一种操作。

JAVA中的八种基本类型有:byte short int long float double boolean char

每一种基本数据类型在java中对应的会有一个包装类,其目的是为了丰富其功能。对应关系如下图所示:

16306d37eff7e85205caa5cfb82736e5.png

一、名词解释

装箱:将基本数据类型转为其包装类就为装箱操作

拆箱:将其包装类转为基本数据类型就为拆箱操作

二、原理:(以int和包装类Integer讲解,其他的类型同理)

Integer a = 100; //100为基本类型,将100赋值给a就会发生自动装箱的操作

int b = a; //此时a为包装类型,将a赋值给b 就会自动发生拆箱操作。

实际发生的操作:

在装箱时会自动调用 Integer 的 valueOf()方法,在拆箱时会自动调用intValue()方法,源码如下

public static Integer valueOf(int i) {

assert IntegerCache.high >= 127;

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

/**

* Returns the value of this {@code Integer} as an

* {@code int}.

*/

public int intValue() {

return value;

}

注意:Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。两种浮点数类型的包装类 Float,Double 并没有实现常量池技术

三、实际问题

Integer i1 = 40;

Integer i2 = new Integer(40);

System.out.println(i1==i2);//输出 false

解释:

Integer i1 = 40; Java 在编译的时候执行的代码是Integer.valueOf(40),从而使用的是常量池中的数据

Integer i2 = new Integer(40); 创建的新的对象

所以两个对象不相等

Integer i1 = 40;

Integer i2 = 40;

System.out.println("i1=i2 " + (i1 == i2)); //true

解释:

Integer i1 = 40;

Integer i2 = 40;会发生装箱操作,实际执行的代码是 Integer.valueOf(40),而40是在缓存范围内的,

所以i1 i2都是用的缓存池中的同一数据,地址相同,所以两个对象 == 为true

Integer i1 = 333;

Integer i2 = 333;

System.out.println("i1=i2 " + (i1 == i2)); //false

解释:

Integer i1 = 40;

Integer i2 = 40;会发生装箱操作,实际执行的代码是 Integer.valueOf(40),而333不在缓存范围内,

所以会创建新的Integer对象,地址不同,所以两个对象 == 为false

Integer i1 = 40;

Integer i2 = 40;

Integer i3 = 0;

System.out.println("i1=i2+i3 " + (i1 == i2 + i3)); //输出true

解释:

先计算i2 + i3 ,i2 i3 发生自动拆箱,然后进行相加得到一个int值

然后判断相等时,i1又发生自动拆箱,最后还是两个int数值比较相等

Integer i4 = new Integer(40);

Integer i5 = new Integer(40);

System.out.println("i4=i5 " + (i4 == i5));//输出false

解释:

两个对象 == 比较,比较的是地址,所以不相等

本文地址:https://blog.csdn.net/weixin_42849706/article/details/109638998

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值