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,超出范围新建对象;== 比较只在缓存内相等,超范围必不等。

相关推荐
暗冰ཏོ1 分钟前
Go 语言从入门到后端项目实战完整指南
开发语言·后端·golang·go·go语言
Xin_ye100863 分钟前
C# 零基础到精通教程 - 第十七章:前端集成——Blazor 基础
开发语言·c#
LDR0065 分钟前
LDR6020:多 Type‑C 端口角色管理与外设上电顺序的智慧核心
c语言·开发语言·云计算
寂夜了无痕5 分钟前
IntelliJ IDEA 高效配置:新建文件自动生成作者与时间注释
java·ide·intellij-idea
leonidZhao14 分钟前
Java 25新特性:模块导入申明
java
小杍随笔14 分钟前
【Rust 工具链管理完全指南:rustup toolchain 命令实战详解】
开发语言·后端·rust
五月君_18 分钟前
放弃 Python,Kimi 用 TS + Node.js 重写了一个 Kimi Code
开发语言·python·node.js
Cloud_Shy61833 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔
开发语言·python
weixin_4896900238 分钟前
【IDEA 2025.2.4】 Maven 仅能手动 Reload All Maven Projects 问题解决
java·maven·intellij-idea
雨辰AI39 分钟前
MySQL 迁移至达梦 DM9 完整改造指南|99% SQL 零改动
java·开发语言·数据库·sql·mysql·政务