当前位置: 首页 > article >正文

【Java基础面试题011】什么是Java中的自动装箱和拆箱?

相关知识补充:《Java从入门到精通(JDK17版)》_尚硅谷电子书.pdf · Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com)

回答重点

自动装箱:Java编译器自动将基本数据类型转换为包装类型

自动拆箱:Java编译器自动将包装类转换为基本数据类型

主要作用

  • Java5中引入,主要是为了提高代码的可读性,减少手动转换操作,简化代码编写,开发者可以更方便地在基本类型和包装类之间进行转换

常见于

  • 集合类中无法存储基本类型,如List<Integer>
  • 自动装箱和拆箱经常在算术运算中出现,尤其是包装类参与运算时

扩展知识

自动装箱与拆箱的底层实现

自动装箱和拆箱不是通过语法糖实现的,它是通过调用包装类的valueOf()和xxxValue()方法实现的

  • 自动装箱调用:Integer.valueOf(int i)
  • 自动拆箱调用:Integer.intValue()
Integer a = Integer.valueOf(10);  // 自动装箱
int b = a.intValue();             // 自动拆箱

自动装箱与拆箱的注意点

性能影响

自动装箱和拆箱虽然简化了编码,但在频繁使用的场景,可能导致性能开销,尤其是在循环中频繁发生装箱或拆箱时,容易引入不必要的对象创建和垃圾回收。

所以尽量避免在性能敏感的代码中频繁使用自动装箱和拆箱

下面这个场景,就要选择基本类型

Integer sum = 0;
for (int i = 0; i < 10000; i++) {
    sum += i;  // sum 是包装类型,导致多次装箱和拆箱
}

http://www.kler.cn/a/421429.html

相关文章:

  • 【开源】A060-基于Spring Boot的游戏交易系统的设计与实现
  • 重生之我在异世界学编程之C语言:选择结构与循环结构篇
  • 基于Transformer的编码器-解码器图像描述模型在AMD GPU上的应用
  • 蓝桥杯准备训练(lesson2 ,c++)
  • 多模态COGMEN详解
  • 网络(TCP)
  • 基于Java Springboot高校社团微信小程序
  • Nginx负载均衡综合实验
  • 【开源】A059-基于SpringBoot的社区养老服务系统的设计与实现
  • flutter Owner和Binding学习
  • 计费结算系统的架构设计思路
  • SpringBoot+MyBatis整合ClickHouse实践
  • Robot Screw Theory (Product of Exponentials)机器人螺旋理论(指数积)
  • 鸿蒙Next学习-webview原生与JS交互通信
  • 你听说过MIPS吗?它和ARM有何区别?
  • 2023年第十四届蓝桥杯Scratch国赛真题—推箱子
  • 如何解决 java.rmi.AlreadyBoundException: 已绑定异常问题?亲测有效的解决方法!
  • [C++设计模式] 为什么需要设计模式?
  • C++入门一
  • P3916 图的遍历(Tarjan缩点和反向建边)
  • 模拟实现单链表 —— SingleLinkedList
  • C++:特殊类设计及类型转换
  • 动捕丨数字人丨AIGC实训室方案:赋能高校数字化复合型人才培养
  • Scala正则表达式03
  • ESP32项目 --- 智能门锁(WiFi 蓝牙 OTA)
  • 《Vue零基础入门教程》第十七课:侦听器