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

相关推荐
wjs2024几秒前
Python pass 语句详解
开发语言
专注VB编程开发20年几秒前
专业分析python底层调用与按键精灵,ah3等的对比,hookdll,内存加载,调用.net dll
开发语言·javascript·python·microsoft·php·.net
时间不早了sss1 分钟前
Python处理文档
开发语言·前端·python
cici158743 分钟前
MATLAB GUI构建一个AIS自动船舶系统
开发语言·matlab
一氧化二氢.h4 分钟前
【java】的数组列表和集合的区别是什么
java·开发语言
Shan12054 分钟前
实例分析:重载自定义参数的new
开发语言·c++
PersistJiao4 分钟前
开发环境对比:VS Code、Cursor、IntelliJ IDEA
java·ide·intellij-idea
科研小白_6 分钟前
【第二期:MATLAB点云处理基础】KD树与点云邻域搜索
java·前端·人工智能
IT策士7 分钟前
Python PPT操作:从入门到精通
开发语言·python·powerpoint
Don.TIk8 分钟前
天机の学堂
java·spring boot·spring·maven·mybatis