面试官常问问题:Java中的128陷阱详解

看这样两段代码,思考结果返回的是什么

Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2);
Integer num3 = 128;
Integer num4 = 128;
System.out.println(num3 == num4);

揭晓答案:第一段代码的结果是true,第二段代码的结果是false。不信可以自己去试试~~

这个时候,大家就疑惑了,明明都是一样的数,怎么一个判断结果就是true,一个 判断结果就是false,这就是面试常常踩坑的问题:128陷阱!!

128陷阱:

Integer 数据类型使用“==”比较时,如果对象值的范围在 127以上 或 -128以下,那么两个对象值相同的情况下,返回的结果是false。

为什么会出现这样的现象呢? 让我们一起看看 Integer 数据类型的 valueOf 方法的源码:

原因就是:Integer 的 valueOf 方法当中,存储着一个 cache 数组,该数组相当于一个缓存,范围在 -128~127 闭区间。

初始化 cache 数组源码:

当在该范围中进行自动装箱的时候,直接返回该值的内存地址(即 cache 数组的地址),所以在 -128~127 之间的数值用 == 进行比较时结果是相等(true),相当于比较的是同一元素的内存地址。不在该范围的数,需要开辟一个新的内存空间,此时内存地址就不相同了,所以返回结果是不相等(false)。

注意!!!!!!!!

如果对象是 new 出来的(如下),那么就不会存在128陷阱。

原因是 new 出来的对象,内存地址都是不同的,比较的就不是同一个对象了。

Integer num5 = new Integer(100);
Integer num6 = new Integer(00);
System.out.println(num5 == num6);
// 结果是 false

Integer num7 = new Integer(128);
Integer num8 = new Integer(128);
System.out.println(num7 == num8);
// 结果是 false

其实,不只是 Integer  类,其他包装类也有类似的缓存技术,还需要去了解一下包装类,自动装箱拆箱的知识内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/324142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

城市信息模型平台顶层设计与实践-CIM-读书笔记

城市信息模型平台顶层设计与实践-CIM-读书笔记 1、地理空间框架 GB/T 30317—2013《地理空间框架基本规定》规定地理空间框架为:“地理信息数据及其采集、加工、交换、服务所涉及的政策、法规、标准、技术、设施、机制和人力资源的总称,由基础地理信息…

Graphics2D - 生成证书图片

需求:用户领取证书功能。起初做法是将证书内容保存至富文本编辑器,再将富文本内容返回,由前端组成证书页面。但是前端因为屏幕尺寸、拉伸等问题,导致展示的效果不尽人意,无法满足业务要求。所以选择了使用Graphics2D在…

【栈】Leetcode 496 下一个更大元素I

【栈】Leetcode 496 下一个更大元素I 解法1 两个单调栈解法2 ---------------🎈🎈题目链接🎈🎈------------------- 解法1 两个单调栈 两个栈进行操作,一个栈用来遍历寻找,一个栈用来保留 将nums2中的元素…

电商平台api接口对接须知

随着互联网的发展和普及,电商平台已成为人们日常生活中不可或缺的一部分。而为了保证电商平台的正常运行,平台与开发者之间需要进行数据交互,这便涉及到了电商平台API接口对接的问题。本文将详细介绍电商平台API接口对接的须知事项。 一、了…

去他的“不喝不给面子”,我只要“酒文化”,不要“酒桌文化”!

(图源网络,侵删) 文 | 琥珀酒研社 作者 | 五画 这是我最讨厌的环节。 前段时间,公司对客户安排个答谢宴,我知道我要去餐厅陪酒了,即便我算是个爱喝酒的人,但也感到十分头疼。 进到包厢里我…

数据结构学习 jz53_1 在排序数组中查找数字1 0 ~ n - 1 中缺失的数字

关键词:查找算法 二分法 映射 位运算 题目一:统计目标成绩的出现次数 方法一:我自己写的。[ 用时: 13 m 3 s ] 二分法线性扫描 方法二:看了题解 方法一: 二分法线性查找 思路: 先二分查找找到和targe…

FPGA开发设计

一、概述 FPGA是可编程逻辑器件的一种,本质上是一种高密度可编程逻辑器件。 FPGA的灵活性高、开发周期短、并行性高、具备可重构特性,是一种广泛应用的半定制电路。 FPGA的原理 采用基于SRAM工艺的查位表结构(LUT),…

15 万奖金!开放原子开源大赛 OpenAnolis -云原生赛题报名开始

开放原子开源基金会牵头发起的首届“开放原子开源大赛”,旨在联合开源组织、企事业单位、高等院校、科研院所、行业组织、投融资机构等多方资源,充分发挥产业链生态上下游的协同能力,基于开源共享、共建共治的原则共同举办。大赛搭建面向全球…

LaTeX 章节的使用

目录 1、介绍 2、章节的等级 3、取消编号章节 4、章节引用 1、介绍 命令\section{}标志着一个新章的开始,大括号内的文字为章的标题。章的编号是自动生成的,你也可以使用没有编号的章。 \documentclass[]{article}\begin{document}\section{Introd…

Kubernetes (十三) 存储——持久卷-动静态分配

一. 简介 二. NFS持久化存储步骤(静态分配) 1. 集群外…

python中小数据池和编码

嗨喽,大家好呀~这里是爱看美女的茜茜呐 ⼀. 小数据池 在说小数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text…

腾讯云服务器租用价格表_2024新版报价

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

2024年腾讯云新用户优惠云服务器价格多少?

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

Ubuntu20.04安装配置OpenCV-Python库并首次执行读图

一、选择三方提供的预编译包安装: 可以从官网下载 OpenCV 的安装包,编译后使用;也可以直接使用第三方提供的预编译包 安装。显然后者不需要执行编译步骤,更便捷。选择由 PyPI 提供的 OpenCV 安装包,可以在 https://py…

排序——计数排序

文章目录 概念思路绝对映射:相对映射 代码实现特性结果演示 概念 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

2024年腾讯云服务器多少钱1年?超便宜62元一年

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

Zung氏抑郁自评量表SDS

抑郁症是常见的心理障碍,其症状表现为:心境低落、思维迟缓、意志活动减退、认知功能损害、躯体症状等。在生活中常有悲观消沉,灰心丧气,对所有事情都提不起兴趣,严重的还会出现肢体僵硬和耳鸣等症状。 部分人有明显的…

Lede(OpenWrt)安装和双宽带叠加

文章目录 一、Lede介绍1. 简介2. 相关网站 二、Lede安装1. 编译环境2. SHELL编译步骤3. 腾讯云自动化助手 三、Lede配置1. 电信接口配置2. 联通接口配置3. 多线多播配置4. 网速测试效果 一、Lede介绍 1. 简介 LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。 …

哈希(hash)

目录 一、什么是哈希 二、哈希冲突 三、哈希函数 3.1、哈希函数设计原则 3.2、常见的哈希函数 四、哈希冲突解决 4.1、闭散列 4.2、开散列 五、哈希表的模拟实现 5.1、哈希表的功能模拟实现 5.2、测试模拟实现: 一、什么是哈希 如果构造一种存储结构&…