装箱和拆箱

本文深入探讨了Java中原始类型(如int)与对象类型(如Integer)的区别,包括它们的比较方式(== vs .equals()),以及装箱与拆箱的过程。通过实例解析了Integer缓存机制对值比较的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Primitive type(值类型):int,long,float…

用a==b判断值是否相等,逻辑上就是一个值

 

Object(引用类型): Integer,Long,Float,String…

用a==b判断的不是值是否相等,而是判断是否为同一个Object

用a.equals(b),或Object.equsls(a,b)来判断值是否相等

注意:a.equals(b)要判断a是否为null,为null的话,会抛出nullpointerexeception

         为每个类写equals函数就可以用自己的逻辑去判断他们是否相等

 

Boxing and  Unboxing(一些需要注意的细节)

Integer a  =  2;//Boxing

意思是:把2装进箱子里,箱子是Integer类型,由a来指向

Integer b  =  new Integer(2)//Boxing

生成一个Integer类型的箱子,箱子装的值是2,b指向该箱子

int v  =  a.intValue();//Unboxing

意思是:把a指向的箱子的值取出

 

懂得上面的一些细节,就能清楚搞明白下面一些容易混淆的知识点(所以原理很重要)

new Integer(2)== 2;//(true)java会自动Boxing、Unboxing

new Integer(2)==new  Integer(2);//(false)分别新建一个箱子

Integer.valueOf(2)  == Integer.valueOf(2);//(true/false)

如果IntegerCache.low<=i<=IntegerCache.high,返回的是系统已经生成的的东西,否则会new 一个箱子出来,则返回false。箱子里面的值是传入的数,此处是2, IntegerCache.low和IntegerCache.high的值由系统决定

Integer.valueOf(2).invalue()==2;//(true)

New Integer(2).equals(new  Integer);//(true)equals函数就是判断值是否相等,如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值