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

相关推荐
小松加哲10 分钟前
Spring MVC 核心原理全解析
java·spring·mvc
Ulyanov30 分钟前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊33 分钟前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【31】集成 Studio 模块实现可视化 Agent 调试
java·人工智能·spring
014-code1 小时前
Spring Data JPA 实战指南
java·spring
安小牛1 小时前
Android 开发汉字转带声调的拼音
android·java·学习·android studio
聚美智数1 小时前
企业实际控制人查询-公司实控人查询
android·java·javascript
zb200641201 小时前
SpringBoot详解
java·spring boot·后端
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第7题:HashMap的get流程是什么
java·后端·面试·哈希算法·散列表·hash-index·hash
我头发多我先学2 小时前
C++ 模板全解:从泛型编程初阶到特化、分离编译进阶
java·开发语言·c++