当前位置: 首页 > news >正文

包装类的缓存机制

这个缓存机制或许是很多人都没有注意到的一个点,有时候一不小心就会出错,出错了你或许都不知道错在哪里。

该机制的引入是为了提升性能并减少内存的使用,因为包装类相对基本类型来说,多了垃圾回收,内存分配等,性能相对较低。

缓存机制就是让各个包装类在一定大小范围内,不直接创建新的对象,而是直接从缓存中缓存中获取对象,而这里的缓存中的对象是JVM在类加载的时候就已经创建好了。

因为该机制,有时候两个相同数值的包装类的对象也有可能是相等的,不能惯性的认为类的不同对象不可能相等,我之前写力扣就是踩的这个坑,怎么找等没从这个上面去考虑。

下面举一个例子

public class IntegerCacheExample {public static void main(String[] args) {Integer a = Integer.valueOf(100);Integer b = Integer.valueOf(100);// 输出 true,因为 100 在缓存范围内,a 和 b 引用同一个对象System.out.println(a == b); Integer c = Integer.valueOf(200);Integer d = Integer.valueOf(200);// 输出 false,因为 200 不在缓存范围内,c 和 d 是不同的对象System.out.println(c == d); }
}

最后缓存的范围到底是多少呢,下面吧常见的列举一下

Integer ,Byte,Long,Short:-128 ~127

Character:ASCII中的0~127

Boolean单独讲一下,因为他不存在数值的范围的概念

如果使用Boolean.valueOf()来构造对象,只要都是true或false,那么这两个对象就是一样的

如果是用的new Boolean()那么就不是一样的了

举个例子理解一下

public class BooleanValueOfComparison {public static void main(String[] args) {Boolean bool1 = Boolean.valueOf(true);Boolean bool2 = Boolean.valueOf(true);// 输出 true,因为引用同一个 Boolean.TRUE 对象System.out.println(bool1 == bool2); Boolean bool3 = Boolean.valueOf(false);Boolean bool4 = Boolean.valueOf(false);// 输出 true,因为引用同一个 Boolean.FALSE 对象System.out.println(bool3 == bool4); Boolean bool1 = new Boolean(true);Boolean bool2 = new Boolean(true);// 输出 false,因为是不同的对象实例System.out.println(bool1 == bool2); Boolean bool3 = new Boolean(false);Boolean bool4 = new Boolean(false);// 输出 false,因为是不同的对象实例System.out.println(bool3 == bool4); }
}

再提一嘴,Double没有缓存机制

http://www.xdnf.cn/news/208747.html

相关文章:

  • SELinux 从理论到实践:深入解析与实战指南
  • 算法题(137):丢手绢
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 篮球足球体育球员综合资讯网站模板
  • git学习之git常用命令
  • MySQL 在 CentOS 7 环境下的安装教程
  • Go 语言中的 `recover()` 函数详解
  • 快速了解Go+微服务(概念和一个例子)
  • CA添加删除辅小区信令流程
  • 联邦学习与安全多方计算的结合是隐私保护机器学习领域
  • Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin
  • 华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发
  • 4、RabbitMQ的七种工作模式介绍
  • CSS--图片链接水平居中展示的方法
  • Rust Ubuntu下编译生成环境win程序踩坑指南
  • 《Origin画百图》之带颜色映射的3维散点图
  • 局部和整体的关系
  • elementui里的el-tabs的内置样式修改失效?
  • Error: error:0308010C:digital envelope routines::unsupported 高版本node启动低版本项目运行报错
  • OpenCV 图形API(71)图像与通道拼接函数-----从图像(GMat)中裁剪出一个矩形区域的操作函数 crop()
  • 一文简单记录打通K8s+Kibana流程如何启动(Windows下的Docker版本)
  • 高翔《视觉SLAM十四讲》第七章视觉里程计3d-2d位姿估计代码详解与理论解析
  • AI图片跳舞生成视频,Uni Animate本地部署。
  • JVM调优实战(JVM Tuning Pactice)
  • 【Sqlalchemy Model转换成Pydantic Model示例】
  • GD32F407单片机开发入门(十七)内部RTC实时时钟及实战含源码
  • 蓝桥杯 5. 拼数
  • 共探蓝海赛道增长新方法 阿里国际站智能AI全球买家分析峰会在深落幕
  • 每天一道面试题@第四天(Java基础)
  • LangChain入门(四) 部署应用程序