今日面试题 :什么是 Java 中的自动装箱和拆箱?
大家好,我是鸭鸭。
刷题就上面试鸭,帮助大家更高效通过面试(支持网页端、小程序):https://mianshiya.com/ 。
祝大家都能拿到心仪的 Offer!
回答重点
自动装箱(Autoboxing):指的是 Java 编译器自动将基本数据类型转换为它们对应的包装类型。比如,将 int 转换为 Integer。
自动拆箱(Unboxing):指的是 Java 编译器自动将包装类型转换为基本数据类型。比如,将 Integer 转换为 int。
主要作用:
- 它在 Java 5 中引入,主要是为了提高代码的可读性,减少手动转换操作,简化了代码编写,开发者可以更方便地在基本类型和包装类型之间进行转换。
常见于:
- 集合类如
List<Integer>中无法存储基本类型,通过自动装箱,可以将int转换为Integer存入集合。 - 自动装箱和拆箱经常在算术运算中出现,尤其是包装类型参与运算时。
扩展知识
自动装箱与拆箱的底层实现
自动装箱和拆箱并不是通过语法糖实现的,它是通过调用包装类型的 valueOf() 和 xxxValue() 方法实现的。
- 自动装箱调用:
Integer.valueOf(int i) - 自动拆箱调用:
Integer.intValue()
示例:
▼java复制代码Integer a = Integer.valueOf(10); // 自动装箱 int b = a.intValue(); // 自动拆箱
自动装箱与拆箱的注意点
性能影响
自动装箱和拆箱虽然简化了编码,但在频繁使用的场景,可能导致性能开销,尤其是在循环中频繁发生装箱或拆箱时,容易引入不必要的对象创建和垃圾回收。
所以尽量避免在性能敏感的代码中频繁使用自动装箱和拆箱。例如:
▼java复制代码Integer sum = 0; for (int i = 0; i < 10000; i++) { sum += i; // sum 是包装类型,导致多次装箱和拆箱 }
NullPointerException
在进行拆箱操作时,如果包装类对象为 null,会抛出 NullPointerException。 示例:
▼java复制代码Integer num = null; int n = num; // 抛出 NullPointerException
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
