面试题-Integer

 包装类的一道面试题,观察一下代码会输出什么

public static void main(String[] args) {
        Integer a=127;
        Integer b=127;

        Integer c=128;
        Integer d=128;

        System.out.println(a==b);
        System.out.println(c==d);
    }

答案:true和false

解析:这是自动装箱的操作,而根据我们学习装箱拆箱相关语法时可知,装箱操作在底层是由valueof()方法辅助完成的,所以我们可以观察valueof()是如何完成工作的

如图中所示,绿色字体是对valueof()方法的解析,我们可以读出大致意思 这个方法保存一组-128-127范围内的数据存储在数组cache中,

再来看方法体,假设传入的参数为-128,即int i=-128,是满足if条件的(>=-128&&<=127),进入if体,[i+(-Integer.low)]=[-128+(-(-128))]=[0],即会返回cache[0]的内容,即-128;假设传入的参数为127,也满足if条件,[i+(-Integer.low)]=[127+(--127)]=[255],即返回数组cache[255]的内容,127;

综上所述:倘若传入的参数在-128到127之间内,会返回其本身,而如果不在范围内,返回的虽然内容相同,但却不是同一个对象,而是new neteger了一个新对象(存储i)来返回。

所以我们要从其底层逻辑来分析,不能浮于表面。跟交朋友一样,不能只看颜值不看内核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值