装箱(Boxing)与拆箱(Unboxing)

Integer缓存池-CSDN博客中我们讲到了自动装箱也会隐式调用Integer.valueOf()方法,那装箱到底是什么呢?🐽

装箱(Boxing) 和 拆箱(Unboxing) 是 Java 中的一种语法特性,主要用于在 基本数据类型 和 包装类对象 之间进行转换。它们的引入主要是为了增强 Java 的灵活性和易用性,尤其是在泛型、集合框架等场景中。

装箱(Boxing)

装箱是指将基本数据类型转换为对应的包装类对象。例如,将int转换为Integerdouble转换为Double等。示例如下:

 int a=123;
 Integer box1=Integer.valueOf(a);//手动装箱
 Integer box2=a;//自动装箱

拆箱(Unboxing)

拆箱是指将包装类对象转换回基本数据类型。例如,将Integer转换为intDouble转换为double等。示例如下:

 Integer a=10;
 int unbox1=a.intValue();//手动拆箱
 int unbox2=a;//自动拆箱

自动装箱和拆箱

Java 5引入了自动装箱和拆箱功能,编译器会自动完成这些转换,简化代码。

// 自动装箱
Integer autoBoxedInt = 10; // 编译器自动将int转换为Integer

// 自动拆箱
int autoUnboxedInt = autoBoxedInt; // 编译器自动将Integer转换为int

注意事项

性能开销

  • 装箱和拆箱会创建临时对象,可能带来额外的内存分配和垃圾回收开销。

  • 在性能敏感的代码中,应尽量避免频繁的装箱和拆箱操作。

  • 举个栗子~

    long startTime = System.nanoTime();
    for (int i = 0; i < 1000000; i++) {
        Integer boxed = i; // 自动装箱
        int unboxed = boxed; // 自动拆箱
    }
    long endTime = System.nanoTime();
    System.out.println("Time taken: " + (endTime - startTime) + " ns");

空指针异常

  • 拆箱时,如果包装类对象为 null,会抛出 NullPointerException

    Integer boxedInt = null;
    int unboxedInt = boxedInt; // 抛出 NullPointerException

缓存机制

  • 包装类(如 IntegerLong)对一定范围内的值进行了缓存,超出范围时会创建新对象。 

     Integer a=127;
     Integer b=127;
     System.out.println(a==b); //true
     System.out.println(a.equals(b)); //true
    
     Integer a1=128;
     Integer b1=128;
     System.out.println(a1==b1); //false
     System.out.println(a1.equals(b1)); //true
    
  • 包装类对象需要使用"equals()"方法进行比较,而非"==",因为==比较的是引用而非值。

  • 我利用"=="比较是想让大家进一步了解Integer缓存池的特点,常量池的范围是-128~127,如果超出了常量池的范围,那在自动装箱的时候就会创建新对象。所以a1与b1超出了Integer缓存池的范围,就会创建新对象存放在不同的内存地址中。

装箱和拆箱的优点

  • 支持泛型和集合框架。

  • 简化代码,减少手动转换的繁琐。

  • 提高代码可读性和可维护性。

  • 增强代码的兼容性和灵活性。

  • 支持面向对象编程。

本猪是萌新,有不完善或者不正确的地方,欢迎大家留言。🐽

肥嘟嘟左卫门就讲到这里啦,麻烦大家一键三连!!!🐽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值