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

Integer、Long 等包装类 == 值判断、地址判断与缓存

先看下以下代码和输出

   public static void main(String[] args) throws Exception{Integer a=-128;Integer aa=-128;System.out.printf("a=aa? %s \n",a==aa);Integer b=127;Integer bb=127;System.out.printf("b=bb? %s \n",b==bb);Integer c=128;Integer cc=128;System.out.printf("c=cc? %s \n",c==cc);Integer d=126;Integer dd= new Integer(126);System.out.printf("d=dd? %s \n",d==dd);int e=12611;Integer ee= new Integer(12611);System.out.printf("e=ee? %s \n",e==ee);int f=12611;Integer ff= 12611;System.out.printf("f=ff? %s \n",f==ff);}

a=aa? true 
b=bb? true 
c=cc? false 
d=dd? false 
e=ee? true 
f=ff? true 

那么为什么会会出现这样的结果呢?

这是因为==只有在Java基本类型(short,int,long,byte,char,float,double,boolean)中比较的是值,其他类型中比较的是内存地址。因此,InteGer类中==比较的是内存地址,而不是值从而导致c和cc因为内存地址不相同导致c==cc不相同。

那为什么a=aa 和 b=bb 运行起来又是ture呢?

这是因为Integer类在-128至127(默认)区间的Integer实例缓存到cache数组中,所以

a=aa 和 b=bb都是true

那为什么d=dd 运行起来又是ture呢,他们都在-128和127之间啊?

这是因为区间的Integer实例缓存不包含new出来的对象

总结

Integer 和 int == 这样判断相等是可以的,

而Integer 和 Integer 要判断相等,推荐用equals (NULL值时也可以判断)

http://www.lryc.cn/news/148840.html

相关文章:

  • numpy学习:reshape和resize
  • JPA在不写sql的情况下实现模糊查询
  • Java设计模式之单例模式
  • Vue3 学习
  • Error obtaining UI hierarchy Error taking device screenshot: EOF/NULL 解决办法
  • Java框架之王:Spring的崛起与进化
  • 【位运算】位运算常用技巧总结
  • 【STM32】IIC使用中DMA传输时 发送数据总少一个的问题
  • 记录layui数据表格使用文件上传按钮
  • c++之枚举
  • LeetCode 热题 100(七):105. 从前序与中序遍历序列构造二叉树、14. 二叉树展开为链表
  • 机器学习笔记 - 在表格数据上应用高斯混合GMM和网格搜索GridSearchCV提高分类精度的机器学习案例
  • 【UE 材质】模型部分透明
  • Web3 社交平台如何脱颖而出?我们和 PoPP 聊了聊
  • 【Android】ARouter新手快速入门
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现
  • Oracle Scheduler学习
  • 用户体验地图是什么?UX设计心得分享
  • vue3动态路由警告问题
  • 17 Linux之大数据定制篇-Shell编程
  • SpringBoot集成WebSocket
  • Linux服务器部署JavaWeb后端项目
  • 原生小程序 wxs 语法(详细)
  • MySQL中count(*)和count(1)和count(column)使用比较
  • python用 xlwings库对Excel进行 字体、边框设置、合并单元格, 版本转换等操作
  • Golang 中的 archive/zip 包详解(二):常用类型
  • Qt应用开发(基础篇)——错误提示框 QErrorMessage
  • HLS 后端示例
  • 实录分享 | Alluxio在AI/ML场景下的应用
  • Streamlit 讲解专栏(十二):数据可视化-图表绘制详解(下)