背景

面试题, 相关问题的考察.
题目大概是, 包装类型Integer == 比较的时候 : -127 ~ 128 是否相等.
其他是否相等?

原理

== 比较的是地址. 如果是不同的对象, 那么就不相等.

实践

下面是几个简单实践.

全部新建对象

解释: 新建对象后, 地址不同, 所以都是false
在这里插入图片描述

不新建对象

暂时的理解: -127 ~ 128 比较的对象的缓存
在这里插入图片描述

一些思考

时间多, 一些灵感

为什么设计这个缓存

HotSpot 团队研究, 90% 以上的整型使用落在 -128~127范围内(2000年代初期数据).
缓存范围 -128~127共 256 个对象 ≈ 4KB 内存(每个 Integer对象约16B)

为什么不多缓存一点

扩大到 -256~255则需 512 对象 ≈ 8KB,收益递减

冷知识: 上限值可以调整

部分源码如下:

// IntegerCache 源码片段(OpenJDK 17)
private static class IntegerCache {static final int low = -128; // 硬编码下限static final int high;static {high = java.lang.Integer.getInteger("java.lang.Integer.IntegerCache.high", 127);// 上限可通过VM参数调整}
}

为什么下限值不能自定义呢?

防止滥用:若允许下限调至 -1,000,000,可能导致缓存占用数百MB内存

其实其他包装类型也有缓存

缓存范围如下:

缓存范围可调性
Integer-128~127仅上限可调
Long-128~127完全不可调
Short-128~127完全不可调
Character0~127(ASCII范围)完全不可调

这个居然也是API?

Integer b = new Integer(100); // ⚠️ 已弃用API

9版本被弃用了: 神奇!

/*** @deprecated* It is rarely appropriate to use this constructor. * Use {@link #valueOf(int)} to take advantage of caching.*/
@Deprecated(since="9")
public Integer(int value) {this.value = value;
}

设计思想

这种设计体现了 Java “80/20法则” 的工程哲学——用最小成本解决大多数问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96047.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96047.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96047.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软Wasm学习-创建一个最简单的c#WebAssembly测试工程

要创建一个最简单的微软 WebAssembly(Wasm)测试工程,最直接的方式是使用 Blazor WebAssembly,这是微软官方推荐的 WebAssembly 开发框架。下面是创建和运行最简单 Blazor WebAssembly 项目的步骤: 相关:微…

通过 GitHub520 项目自动获取最新 Hosts 配置,无需手动查询 IP。

操作步骤:打开终端Command 空格 聚焦搜索“终端”,打开应用。执行一键脚本复制以下命令粘贴到终端运行(需输入密码授权):bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目录与文件操作笔记

一、基本概念1. 数据存储方式对比存储方式适用场景特点数据库存储大量、关系复杂、有序的数据结构化强,支持复杂查询和事务文件存储少量、关系简单的数据(如日志)操作简便,可存储于任意介质2. 文件与流文件:存储在磁盘…

docker部署flask并迁移至内网

需要直接使用的可以使用下面的链接: 通过网盘分享的文件:docker_flask.tar 链接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取码: qxqm 来自百度网盘超级会员v6的分享 外网部署docker版flask 目录结构 ./miniconda-docker/ ├── d…

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

文章目录161. Java Lambda 表达式 - 使用工厂方法创建 Predicates🎯 Predicate 工厂方法概览🧪 示例一:Predicate.isEqual() 工厂方法🧪 示例二:Predicate.not() 工厂方法(Java 11)&#x1f3af…

c#Blazor WebAssembly在网页中多线程计算1000万次求余

在 Blazor WebAssembly 中实现多线程计算并获取线程 ID 是可行的,但需要正确配置多线程环境并处理线程安全和 UI 更新逻辑。以下是完整示例和检测方法:一、准备工作:启用多线程支持首先需确保项目已启用 WebAssembly 多线程,修改项…

鼠标右键没有“通过VSCode打开文件夹”

1, WinR 打开运行,输入regedit,打开注册表,找到HKEY_CLASSES_ROOT\*\shell分支,如果没有shell分支,则在*下点击右键,选择“新建-项”,建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和属性赋值

目录 1. Spring定义: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 创建一个Maven项目 (2). 导入核心 jar包 (3). 编写 spring 配置文件 (4). 编写实体类,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下载上传

前端 大文件分片下载上传 背景介绍: 当前项目是给投行部门做系统,业务方需要有专门的文档中心去管理文件,包括但是不限于文件的上传和下载等等。笔者本来就是采用的浏览器表单上传的方式进行文件上传,但是谁曾想在进行稍微大一点的…

【Python练习】097. 编写一个函数,实现简单的版本控制工具

097. 编写一个函数,实现简单的版本控制工具 097. 编写一个函数,实现简单的版本控制工具 示例代码 功能说明 使用方法 注意事项 实现方法 基于文件快照的实现方法 基于差异存储的实现方法 基于命令模式的实现方法 基于Git-like的实现方法 097. 编写一个函数,实现简单的版本控…

嵌入式硬件篇---Tof

TOF 的原理与本质TOF(Time of Flight,飞行时间)是一种通过测量信号(通常是光)在空间中传播时间来计算距离的技术。其本质是利用 “距离 速度 时间” 的物理公式:通过发射信号(如激光、红外光&…

Vue diff简介

Vue3 diff 最长递增子序列双端diff 理念 相同的前置和后置元素的预处理,考虑边界情况,减少移动;最长递增子序列(动态规划、二分法),判断是否需要移动 操作 前置与后置预处理判断是否需要移动 递增法&#x…

罗技MX Anywhere 2S鼠标修复记录

【现象】单击时总是出现双击的现象 【问题原因】从网络收集: 说法1,欧姆龙微动损坏;说法2,按键磨损导致按键和微动开关接触不良; 【问题排查】 微动损坏:拆掉壳子后,用手按住左键的微动开关&…

常见IP模块的仲裁策略和实现

在一个 Message Unit 中包含两个 Core(处理器核心),它们之间访问共享资源(如寄存器、FIFO、buffer 等)时,仲裁机制(Arbitration) 是确保系统稳定性和正确性的关键。以下是常见的仲裁…

上周60+TRO案件,波比的游戏时间/丹迪世界/飞盘/迪奥/多轮维权,手表/汽车品牌持续发力,垃圾桶专利等新增侵权风险!

赛贝整理上周(2025年8月11日-8月15日)的TRO诉讼案件发案情况,根据赛贝TRO案件查询系统了解到,上周合计发起了超60起诉讼案件,涵盖 IP /品牌、版权、专利等多个领域,涉及影视、奢侈品、汽车、游戏、日常用品…

用 Python 在 30 分钟内搭一个「可回放的实时日志」——把攻击流量变成可视化剧情

业务背景 我们运营一款 FPS 端游,外挂作者常把 DDoS 伪装成「玩家掉线」来骗客服。以前排查要捞 CDN 日志、对时间戳、人工比对,平均 2 小时才能定位。现在用一条 30 行的 Python 脚本把边缘节点日志实时打到 Kafka,再回放到 Grafana&#xf…

如何将 LM Studio 与 ONLYOFFICE 结合使用,实现安全的本地 AI 文档编辑

人工智能正在改变我们的工作方式——但如今大多数 AI 工具都存在弊端:速度和便利性虽有所提升,但也意味着数据需要发送到外部服务器。对于教育工作者、企业、非政府组织以及任何处理敏感信息的人来说,这都是不可接受的风险。 LM Studio 和 O…

超市电商销售分析项目:从数据分析到业务决策

国际超市电商销售数据分析实战:从数据清洗到业务决策的完整流程 在电商行业,数据是驱动业务增长的核心引擎。本文将以国际超市电商销售数据为研究对象,完整拆解从数据准备 → 深度分析 → 策略输出的实战流程,涵盖数据清洗、多维度…

GitHub 热榜项目 - 日榜(2025-08-17)

GitHub 热榜项目 - 日榜(2025-08-17) 生成于:2025-08-17 统计摘要 共发现热门项目:12 个 榜单类型:日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术趋势:1) AI基础设施持续爆发,Archon OS和Parlant聚焦AI任务管…

记忆翻牌游戏 greenfoot 开发

记忆翻牌游戏是一种经典的益智游戏,玩家需要翻开卡片并记住它们的位置,然后找到所有匹配的卡片对。 核心玩法 游戏开始时,所有卡片都是背面朝上玩家每次可以翻开两张卡片如果两张卡片图案相同,则保持翻开状态(匹配成功…