Java 装箱拆箱原理 & 包装类型缓存池

JAVA中的基本数据类型

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

为了让上述基本数据类型可以转为对象,Java在1.5推出了一系列包装类,基本类和包装类互相转换的过程,称为装箱和拆箱

缓存池

缓存池也叫常量池。它是事先存储一些常量数据用以提高性能节省空间的一种技术,大部分的包装类型都实现了缓存池。

创建包装类型时,如果基本类型的值处于缓存池范围中,则不会重新创建对象,而是复用缓存池中的已经创建好的对象;

比如我们将数值8装箱为两个Integer对象,然后一比较就会发现这两个Integer是同一个对象,即比较结果为true。

而当我们将数值128装箱为两个Integer对象,经过比较便会发现,这两个Integer不是同一个对象,即比较结果为false。

这是因为Integer类型默认缓存了[-128, 127]范围的值。只要是这个范围的值自动装箱,便会返回相同的对象,所以如果是包装类型,互相比较的话,不要用==判断,而要用equals()方法判断

自动装箱

装箱 :包装类型 变量 = 包装对象.valueOf(数值);

在装箱过程中,valueOf() 方法会创建一个新的包装类对象,并将基本数据类型的值封装到这个对象中。

拆箱 :基本数据类型 名称 = xxxValue();

在拆箱过程中,xxxValue() 方法会从包装类对象中提取出相应的基本数据类型值,并返回给调用者。

相关推荐
xiaoye20182 小时前
Lettuce连接模型、命令执行、Pipeline 浅析
java
beata5 小时前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Seven976 小时前
剑指offer-81、⼆叉搜索树的最近公共祖先
java
雨中飘荡的记忆1 天前
保证金系统入门到实战
java·后端
Nyarlathotep01131 天前
Java内存模型
java
暮色妖娆丶1 天前
不过是吃了几年互联网红利罢了,我高估了自己
java·后端·面试
NE_STOP1 天前
MyBatis-参数处理与查询结果映射
java
狂奔小菜鸡1 天前
Day40 | Java中的ReadWriteLock读写锁
java·后端·java ee
SimonKing1 天前
JetBrains 用户狂喜!这个 AI 插件让 IDE 原地进化成「智能编码助手」
java·后端·程序员