关于Integer类的一个有趣的面试问题

相信很多人觉得答案是false,false,因为Integer是一个类,把int类型的数据传给Integer类型的数据会创建一个对象,而a,b,c,d作为引用指向的是不同的地址,所以判断相同得到的结果应该是false

但这个想法就正中下怀了,实际上得到的结果是true,false

为什么呢?因为将int类型的数据转换成Integer类型需要调用Integer类中的静态方法valueOf,而valueOf方法的内部实现是这样的:

简单解释是,在-128到127范围内的int类型的数据要进行转换,直接调用数组中已经存储的数据即可,不在这个范围内的才重新创建新的对象,所以127在这个范围内,引用就直接指向数组中已有的数据即可,所以引用的值相同,而128不在这个范围,就需要重新创建对象,所以两个引用指向的对象不同,值也不同

相关推荐
姗姗的鱼尾喵4 分钟前
Java 并发编程高频面试题(含AQS/线程池/锁)
java·经验分享·面试
苦瓜小生10 分钟前
天玑学堂Agent面试总结(一)「持续更新」
面试·职场和发展
夫礼者20 分钟前
【极简监控】选连接池送深度监控?用 Druid 补齐单体应用全局 SQL 统计的最后拼图
java·数据库·sql·druid
MyY_DO20 分钟前
大麦pro 表结构分析
java
ch.ju22 分钟前
Java程序设计(第3版)第二章——变量的三种定义方式2和3
java
aloha_78924 分钟前
软考高项-第九章-项目范围管理
面试
We་ct28 分钟前
JS核心难点解析:变量提升、作用域、Promise、this与类型转换
开发语言·前端·javascript·面试·作用域·类型转化·变量提升
刹_那29 分钟前
Java 转 AI Agent 开发精简指南
java·开发语言·人工智能
二月夜32 分钟前
修改 JAR 文件并重新打包的完整指南
java·spring boot·jar
_MyFavorite_35 分钟前
JAVA重点基础、进阶知识及易错点总结(29)JDK8 时间 API 进阶
java·开发语言·wpf