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() 方法会从包装类对象中提取出相应的基本数据类型值,并返回给调用者。

相关推荐
小羊没烦恼!4 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang4 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi4 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号4 天前
java函数式编程--入门基础
java·编程·函数式编程