Java 自动装箱 / 拆箱 原理详解

自动装箱和拆箱是 Java 的一种语法糖,由编译器在编译阶段自动完成,底层是通过调用包装类的方法实现的。

  1. 自动装箱 :把基本数据类型自动转换成对应的包装类,编译器会自动调用 包装类.valueOf() 方法。

  2. 自动拆箱 :把包装类自动转换成对应的基本数据类型,编译器会自动调用 xxxValue() 方法。

  3. 核心优化点 :为了提升性能,Java 对常用范围的包装类做了缓存机制 ,比如 Integer 默认缓存 -128 ~ 127 之间的值,这个范围内的装箱会直接复用缓存对象,不会新建对象。

  4. 注意点 :包装类为 null 时进行自动拆箱,会抛出空指针异常

Byte、Short、Integer、Long 这四个包装类规则完全一致:自动装箱调用 valueOf (),自动拆箱调用 xxxValue ();统一缓存 -128 ~ 127,超出范围创建新对象,== 比较返回 false。

举例:

Long 装箱调用 Long.valueOf(),拆箱调用 longValue(),缓存范围 -128~127 ,超出范围会创建新对象,== 比较会返回 false。

Byte、Short、Integer、Long 统一缓存 -128~127,超出范围新建对象;== 比较只在缓存内相等,超范围必不等。

相关推荐
YDS8293 小时前
黑马点评 —— 分布式锁详解加源码剖析
java·spring boot·redis·分布式
ZTLJQ3 小时前
数据的基石:Python中关系型数据库完全解析
开发语言·数据库·python
夏霞3 小时前
c# signlar 客户端传递参数给服务端配置方法
开发语言·c#
迷藏4944 小时前
**发散创新:基于 Rust的开源权限管理系统设计与实战**在现代软件架构中,**权限控制**早已不
java·开发语言·rust·开源
升鲜宝供应链及收银系统源代码服务4 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
daidaidaiyu4 小时前
Nacos实例一则及其源码环境搭建
java·spring
2301_818419014 小时前
C++中的解释器模式变体
开发语言·c++·算法
小江的记录本4 小时前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
摇滚侠4 小时前
Java 项目《谷粒商城-1》架构师级Java 项目实战,对标阿里 P6-P7,全网最强,实操版本
java·开发语言