包装类关于拆箱与比较的操作

==与equals()

  • ==
  1. 对于基本数据类型变量利用==来判断他们存储的值是否相同;
  2. 对于引用类型变量,==比较的是他的地址。
  • equals()
  1. 如果没有重写Object中的equals(),那么比较的是对象的地址。
    从源码看出对对象的比较,本质也是用了==

在这里插入图片描述
2. 包装类重写了equals()方法。
如图,以Long类型为例,要参与equals()比较的前提是,被比较对象必须是当前类,或当前类的子类对象(包括当前类型对应的基本数据类型)。否则直接返回false
如果满足条件,(value 是final修饰的long类型成员变量,在new Long对象时予以赋的值。JDK1.5之后有了自动装箱)会先拆箱包装类对象,再按照基本数据类型(该基本数据类型就是value,也就是当前包装类变量所存储的基本类型的值)规则比较。

在这里插入图片描述
同类型包装类和包装类用==比较时,不自动拆箱。如果类型不同,为编译时异常,不能比较。
包装类碰到运算符会自动拆箱,并可能存在类型升级

包装类的缓存问题(多用于==判断)
包装类自动装箱的时候:Byte,Short,Integer,Long都有缓存对象(-128~127),这个范围内的对象,自动装箱值相同时,是指向一个对象。超出了范围则新建对象,存储不同地址。
Character缓存范围:0~127 最早的ASCII码表的128个字符
Boolean:false,true
Float,Double没有缓存对象

例题:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值