news 2026/2/25 11:37:04

128陷阱

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
128陷阱

总结:****Integer包装类在实现自动装箱时,为了节省内存和提升性能,设置了缓存数组。该缓存数组在Integer类加载时预创建了从-128到127共256个Integer对象。当使用自动装箱或调用Integer.valueOf()方法时,如果数值在-128到127范围内,则直接返回缓存中的对象;如果数值超出此范围,则创建新的Integer对象。

128陷阱

128陷阱是原来典型的面试题,考察了Integer底层的逻辑, 典型的形式是下面代码的情况:

Integera1=127;Integera2=127;Integera3=128;Integera4=128;System.out.println(a1==a2);System.out.println(a3==a4);

**没听说过 128陷阱的同学,肯定觉得 完成自动装箱之后,都是new Integer()的对象,内存地址肯定不同 所以
**false false;
但是实际情况如下:

我们会分析上面的情况,在第二部分我们讲到了:

Integera1=127;Integera1=Integer.valueOf(127);

上面的情况1是Integer内部会自动实现情况2的,所以我们会查看Integer.valueOf(127)的源码。





上面的代码是提出了high是127,low是-128。
cache[] 是大小为256的数组解释如下:


解释:

if(i>=IntegerCache.low&&i<=IntegerCache.high)

当输入的值大于等于-128小于等于127的时候返回

returnIntegerCache.cache[i+(-IntegerCache.low)];

接下来看cache数组中存的是什么:

我们可以看到 j = -128 cache是256大小的数组,而且每一个索引对应的是一个new Integer()对象,所以cache数组中存的是已经定义好的从(-128,127)的Intger对应的值。
所以在一次分析最初的问题,100小于127,200大于127 所以 小于127是从数组中 得到的Integer对象指向相同的内存地址,所以前两个返回true,200是返回的新的Integer对象,所以内存地址不同、

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 19:05:00

基于微信小程序的新冠疫情防控信息管理系统毕设源码+文档+讲解视频

前言 本课题聚焦新冠疫情防控场景下信息管理的高效化需求&#xff0c;针对传统防控信息收集滞后、数据分散、交互不便等痛点&#xff0c;设计开发基于微信小程序的新冠疫情防控信息管理系统。系统以微信小程序为前端载体&#xff0c;结合Node.jsExpress后端框架与MongoDB数据库…

作者头像 李华
网站建设 2026/2/24 22:25:05

使用OpenGL绘制卡通效果的圣诞树

使用OpenGL绘制卡通效果的圣诞树引言1. 加载3D圣诞树模型1.1 模型准备1.2 使用Assimp库加载模型2. 使用OpenGL绘制圣诞树2.1 初始化OpenGL2.2 设置着色器3. 添加卡通效果3.1 卡通着色原理3.2 实现卡通着色3.3 添加轮廓线4. 增强圣诞气氛4.1 装饰品4.2 闪烁灯光4.3 雪花粒子系统…

作者头像 李华
网站建设 2026/2/19 10:07:50

算法讲解15:栈

栈&#xff1a;先进后出公式&#xff1a;卡特兰数&#xff1a;n个不同的元素按照某个顺序入栈&#xff0c;对应的合法的出栈顺序有几个&#xff1f;公式如下&#xff1a;C n__2n______n1题目&#xff1a;给出两个序列pushed和poped两个序列&#xff0c;其取值从1到n(n ≤ 10000…

作者头像 李华
网站建设 2026/2/19 13:45:12

Java计算机毕设之基于Springboot+Vue动漫推荐平台管理系统基于协同过滤算法的动漫推荐系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/21 14:58:10

[驱动之路(九)——UART(串口)子系统]学习总结,万字长篇,一文彻底搞懂UART(串口)子系统(含串口数据收发流程解析)

一、UART是什么&#xff1f;UART&#xff08;通用异步收发传输器&#xff09;是一种异步串行通信接口&#xff0c;常用于嵌入式系统和计算机之间传输数据。 它结构简单、稳定可靠&#xff0c;是嵌入式开发中最重要的调试和外接模块的接口之一。串口的主要用途&#xff1a;打印调…

作者头像 李华
网站建设 2026/2/21 6:05:29

Windows系统文件usbperf.dll丢失损坏问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华