自动装箱、拆箱

阅读说明

如有任何疑问或者错误,可以博文私信作者,或添加微信 YY20203_24 备注 文章错误

抛出问题

常见的面试问法
== 与 equals 方法的区别

自己想到的知识点
== 两边有基本数据类型时,比较的是数值
== 两边都是类对象时,比较的是对象地址
equals 是类的方法,比较值是否相等,可由类本身进行处理,比如基本数据类型的equal先判断是否是本类型与值是否相等

一时能想到的点,肯定不全面或者get不到面试官想要你说出的点,下面我们再来学习一遍
1691648763981.jpg

基础介绍

常见的自动装箱、自动拆箱

        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            // 自动装箱
            list.add(i);
        }
        for (int i = 0; i < 10; i++) {
            System.out.println("分割线---------------------------");
            // 自动拆箱
            int a= list.get(i);
        }

深入学习

自动装箱、拆箱与集合结合使用的场景讨论

每个值的添加、获取都需要进行装箱拆箱,当集合长度大时,可考虑使用数组进行操作

jvm缓存与自动装箱

        // Example 3: special case - arises due to autoboxing in Java
        Integer obj1 = 1; // autoboxing will call Integer.valueOf()
        Integer obj2 = 1; // same call to Integer.valueOf() will return same
                            // cached Object

        System.out.println("obj1 == obj2 : " + (obj1 == obj2)); // true

        Integer obj3 = 169; // autoboxing will call Integer.valueOf()
        Integer obj4 = 169; // same call to Integer.valueOf() will return same
        // cached Object

        System.out.println("obj3 == obj4 : " + (obj3 == obj4)); // false

obj1和obj2的初始化都发生了自动装箱操作。但是处于节省内存的考虑,JVM会缓存-128到127的Integer对象。因为obj1和obj2实际上是同一个对象。所以使用”==“比较返回true

注意点

如果是包装类之间的 == 运算,在没有算数运算的情况下不会自动拆箱,比较的是对象地址。遇到算数运算时会进行自动拆箱,比较数值。
如果是包装类和基本类型之间的 == 比较,包装类会拆箱后比较(此处涉及拆箱,需考虑空指针问题)

包装类的equals(Object)方法是不处理数据转型关系的,如Long.equals(Integer.value(3)),类型不一致就会返回false

总结

内容不多,主要是整理出一个思路,方便大家面试和回忆此处的知识点

思绪图

题外话

关注我的工作外生活
公众号搜索 杨方刚的生活录
摸鱼搜索 魔芋办公室

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值