栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包装类与基本数据类型之间的自动装箱与拆箱

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包装类与基本数据类型之间的自动装箱与拆箱

  • 装箱是指基本数据类型转化为包装类型。
  • 拆箱是指包装类型转化为基本数据类型。

在jdk5.0之前,是由程序员自己进行手动装箱与拆箱,具体代码如下。拿Integer 与 int类型来举例说明。

public class ObjectDemo3 {

    public static void main(String[] args) {
        int a = 10;
//        装箱 1
        Integer a1 = Integer.valueOf(a);
//        装箱2
        Integer a2 = new Integer(a);
        System.out.println(a1);
        System.out.println(a2);

//        拆箱
        int a3 = a1.intValue();
        System.out.println(a3);
    }
}

 但是在jdk5.0之后,就实现了自动装箱与拆箱,底层原理与我们手动操作是一样的。为了直观看到装箱与拆箱过程,直接追溯源码。打上断点进行debug调试

点击step into 我们就直接来到了 valueOf(),执行完该方法后 int类型将会被转化为Integer包装类型,这样就实现了 自动装箱。。

 自动拆箱与手动拆箱调用的方法一样,都是intValue(),将Integer包装类型转化为int基本数据类型

关于自动装箱,还有一点特别重要,就是 包装后的Integer对象地址问题,这点的关键就是valueOf(),我们可以看到 如果传入的 int值在 -128~127之间,此时就不会创建Integer对象,而是返回 cache数组中对应元素。此时直接查看cache数组源码。。

因此low = -128  high = 127, 这时我们就知道了 cache数组长度为 256,里面的元素为分别是 -128 ~ 127。 因此只要传入的int值在这范围之内的,就不会创建对象,而是直接返回cache数组中对应元素的地址值。如果传入的int值不在这个范围之内,那么就会重新new Integer()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号