Java包装类对象比较中存在的问题

篇章二 基础——包装类 此篇章为 数据结构 专栏 篇章二 数据结构——前置知识(二)关于包装类的补充。 阅读详情

本文章以Integer包装类为例,讲解一些包装类比较过程中存在的问题。

首先看一段代码:

        Integer i1 = 10;
        Integer i2 = 10;
        System.out.println(i1 == i2);//true

        Integer i3 = 1000;
        Integer i4 = 1000;
        System.out.println(i3 == i4);//false
执行结果就是如注释中所写,你肯定会疑惑,为什么会这样?

听我慢慢解释其中原理。

首先,Integer包装类有个boxing(装箱)的过程,当你执行Integer i1=10时,其实是执行了Integer i1 =Integer.valueOf(10)。

现在我们打开源码,查看Integer源码中的静态方法valueOf(int i)。


可以看到,源码中的valueOf方法并不单纯的new一个Integer对象,而是使用类的静态资源创建了一个缓存区域,在缓存区域事先存储了一些Integer对象,如果i的值在缓存区域中存在,则直接返回缓存中的值。

关于缓存区域的大小,我们再看IntegerCache的源码。


可以看到,缓存区域high值默认是128,low值已经在源码中定义为常量了为-128,而10正是在这个范围内,所以i1和i2是对同一对象的引用,所以是相同的。


当我们使用equals方式进行比较时,能得到理想的结果,可以猜到,equals应该是重写过了,比较的是两个对象的值而不是引用。所以使用equals进行比较才不会出错。


MoveIt避坑指南:UR机械臂编程中常见的5个错误及解决方法 本文针对UR机械臂与MoveIt集成开发中的常见问题,总结了五个典型错误及其解决方案,包括关节限位设置、坐标系混淆、规划器选择、运动学求解器配置以及线程资源管理。重点分析了正逆运动学求解错误的原因,并提供了调整容忍度、显式指定坐标系、选择合适规划器及优化IK配置等实用代码示例,帮助开发者提升编程效率与系统稳定性。 阅读详情

相关推荐

数据获取竟如此简单——全球SRTM 90m DEM V4.1数据

SRTM(Shuttle Radar Topography Mission)是由NASA联合国际合作伙伴开展的雷达地形测绘项目,通过航天飞机搭载的合成孔径雷达系统,于2000年通过发射并接收地表反射的雷达信号,获取全球三维地形数据,这一任务填补了高精度全球地形数据的空白。而本文通过十余行的python代码,就更简单、方便地获取这些数据。

m0_38065162的博客 1400

Integer类----装箱

1.Integer类的用途 Integer 一个整型数据用来存储整数,整数包括正整数,负整数和零。将整型数据存储起来,变成Integer对象。这个过程叫装箱,而将Integer对象变成整型数据,这个过程叫做拆箱。 Int是java的原始数据类型,Integer是java为int提供的封装类。且Integer类有两个父类,一个是object 还有一个是 Number类。 2.如何将数据封装成Integer对象 2.1 装箱 方法1:通过...

m0_55785131的博客 1328

高压脉冲发生器的各种电路图

高压脉冲发生器的各种电路图

qq_65102825的博客 5907

java包装类怎么比较

在Java中,比较包装类对象时,应该使用equals方法而不是==,同时要注意自动装箱拆箱可能带来的影响。此外,可以利用compareTo方法实现包装类对象的大小比较。希望本文对大家理解Java包装类的比较方法有所帮助。

牛肉胡辣汤 1913

人工智能训练师技能等级认定四级技能考核试卷-样题4

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总时长150分钟。考核内容涵盖:1)车牌数据集规范评估与格式处理;2)车牌数据集采集代码修改与数据处理;3)房价预测数据集加载、预处理与可视化分析;4)车牌标注数据集审核与修正;5)螺丝螺母检测数据集的平台创建与共享;6)螺丝螺母数据的去噪处理与标注优化。要求考生使用Python编程、数据处理平台和标注工具完成各项任务,重点考察数据加载、格式转换、缺失值处理、数据可视化、标注审核及平台操作等技能。所有操作需在配备Python3.7和深度学习平台的W

weixin_42221934的博客 350

PX4从放弃到精通(二十七):固定翼姿态控制

固件版本 PX4 1.13.2欢迎交流学习,可加左侧名片。

超维空间科技的博客 6892

Java基本数据类型和包装类的比较

Java 基本数据类型和包装类的比较

心向阳光的天域的博客 235

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 878

java 包装类 万字详解(通俗易懂)

java API专题——八大包装类 内容分享。up将会通过源码分析,断点调试,代码演示等手段带你掌握java包装类!

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 7507

STM32_HAL库—PWM产生指定个数

(一)CubeMX设置: 1. 晶振配置(72M) 2. 引脚配置 3. 中断配置 4. 配置及实现方式 由上推出公式: 机器周期: (72MHz / 36) = 2MHz = 0.5us PWM周期: 0.5 * 100 = 50us = 20kHz 5. 主函数调用PWM函数 HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_2); //此处一句后可直接进入中断 6. PWM溢出回调函数 void HAL_TIM_PWM_PulseFinished

5526

SAP-ABAP:新手入门篇——从0到1写出你的第一个ABAP Hello World程序并完成调试运行

本文是ABAP开发入门指南,详细介绍如何创建并运行第一个"Hello World"程序。主要内容包括:通过SE38事务码进入ABAP编辑器;创建以Z/Y开头的程序并保存为本地对象;编写简单的WRITE输出语句;完成语法检查、激活和执行流程;以及初步体验调试功能。文章特别强调ABAP开发的规范要求,如程序命名规则、激活与保存的区别等,并提供了详细的步骤说明和常见问题提示,帮助零基础开发者快速上手ABAP编程。

baidu_35680696的博客 482

JAVA 包装类

Java 包装类

qq_53312143的博客 5256

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4701

基本类型和包装类对象使用 == 和 equals进行比较的结果?

基本类型的包装类对象使用 == 和 equals进行比较的结果 1、值不同,使用==和equals比较都返回false 2、值相同 使用==比较: 基本类型-基本类型、基本类型-包装对象返回true 包装对象-包装对象返回false 缓存中去的包装对象比较返回true(JVM 缓存部分基本类型常用的包装类对象,如 Integer 缓存 -128 ~ 127 ) ...

ConstXiong 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Java基础-42.5】Java中包装类对象的比较:深入解析与最佳实践

基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean在集合类中存储基本数据类型。提供工具方法(如支持泛型(泛型不能使用基本数据类型)。在Java中,包装类对象的比较涉及到值的比较和引用的比较。使用equals()方法进行值的比较。避免使用==进行值的比较。注意缓存机制对==比较的影响。使用方法进行大小比较。

weixin_39033358的博客 363

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java 中容易混淆的概念:Java 8 中的常量池、字符串池、包装类对象池

1 - 引言 摘录一些网上流传比较广泛的认识,但如果你认为只懂这些就够了,这篇文章就没有必要继续看下去了!!! 常量池分为静态常量池、运行时常量池。 静态常量池在 .class 中,运行时常量池在方法区中,JDK 1.8 中方法区(method area)已经被元空间(metaspace)代替。 字符串池在JDK 1.7 之后被分离到堆区。 String str = new String("He...

Xu_JL1997的博客 5187

为什么整型包装类对象值用 equals 方法比较

在阅读《阿里巴巴Java开发手册》时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。说明:对于Integervar=?在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。 Integer 缓存

weixin_43085797的博客 687

java包装类的比较

java包装类比较注意事项: 包装类对象直接比较的值是对象地址 若要进行value值的比较需要获取真实值,或者直接调用equals方法 code: @Test public void basicTest() { Long t1 = new Long(1L); Long t2 = new Long(1L); System.out.pr...

Cactus_Lrg的博客 484

Java中基本类型和包装类的各类比较(==),以及包装类的对象缓存池

Java中的基本类型及其包装类的比较(==)一直是一个比较头疼的问题,不仅有自动装箱和拆箱操作,部分的包装类还有对象缓存池,这就导致了这部分知识容易混淆。 对于==操作符来说,如果比较的数据是基本类型,则比较它们的值,如果比较的是对象,则会比较对象的内存地址。另外,如果一个是基本类型、一个是包装类型,在比较前会先把包装类型拆箱成基本类型,然后进行比较。 以int为例,这里我们把参与比较的类型分为三种:int、直接new出来的Integer对象和自动装箱出来的Integer对象。 这里先不考虑Integer的

tinyVampire的博客 4079

【Java】Wrapper包装类 (装箱与拆箱、包装类的一些API、包装类对象的缓存问题)

Wrapper包装类 文章目录Wrapper包装类1、为什么要有包装类2、包装类3、 装箱与拆箱4、 包装类的一些API5、 包装类对象的缓存问题6、参考资料 1、为什么要有包装类 为什么要有包装类? 因为Java是面向对象的编程语言,但是Java发明时,是C语言盛行的时候,而且C语言确实很好用。特别是其中的8种基本数据类型,不管在存储还是运算都很强大,那么,Java就延续使用了C语言的8种基本数据类型。 Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本数据类型有它的优

渐若窥宏大的博客 538

Java包装类四:基本数据类型和字符串之间的相互转换,包装类对象的初始值,包装类对象间的比较,附带内容

1.基本数据类型和字符串之间的相互转换 public class WrapTestTwo { public static void main(String[] args) { // 一:基本数据类型转成字符串:通过包装类的toString方法 int t1 = 2; String s = Integer.toString(t1); System.out.println(s); // 二:字符串转换成基本数据类型 // 第一种:通过包装类的parse方法

小枯林的博客 429

【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。如何理解?

包装类==比「地址」,equals 比「数值」,这是核心区别;Integer-128~127 有缓存,== 看似可用,但这是「特例」不是「规则」;避开缓存特例的坑,统一代码规范,适配所有数值场景;所有包装类(Integer、Long、Float 等)的相同值比较,都按这个规则来。

魏波 1034

【Ali规约】比较相同类型的包装类对象之间值,使用 equals 方法

原因 : 包装类对象原本是引用对象,若使用 == 只是比较两个引用变量是否指向相同的对象。在JDK1.5之后有了自动装箱、拆箱。对于 Integer 对象来说,初始值在-128 ~ 127时会将对象放入缓存池(IntegerCache.cache),下次调用相同的值将直接复用。在该区间的Integer 对象可直接进行判读,该区间以外的对象在 Heap 上产生,不会进行复用。所以推荐使用 equal...

teavamc的博客 1730

JAVA中对象的几种比较

对象比较的最佳实践总结不同场景下的选择建议未来Java版本中可能的改进提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档比较方式核心作用灵活性适用场景equals()hashCode()判断内容相等低集合去重、逻辑相等判断Comparable自然排序(默认规则)低对象有固定排序规则Comparator定制排序(多规则)高多种排序需求、第三方类排序简化比较 + 空指针防护中JDK 8+ 简洁排序代码选型口诀判相等:重写equalshashCode。

2402_89003542的博客 2652

包装类对象间的比较以及初始值

1.包装类对象的初始值 包装类初始化值为:null 2.包装类对象间的比较 *当 == 俩边是对象的话,比较的是对象在内存中的引用,然而通过new ,会在内存开辟一段新的空间。 *当有自动拆装箱中会有 包装类.valueOf操作,为了提高效率,提供类似常量数组的缓存区(对象池),如果传过来的数值是在 -128<=参数<=127 就在缓冲区去查找,有就用,没有就创建。如果不在此范围就直接实例化。 基本数据类型的初始值如下图: ...

zhihu000的博客 353

Java 包装类详解

本文全面解析Java包装类的核心机制,涵盖自动装箱拆箱、字符串转换、缓存优化及Integer类常用方法,深入探讨空指针风险、数值精度等陷阱,结合高频面试题剖析整数型常量池原理,助你掌握包装类使用技巧并规避常见错误,轻松应对开发与面试挑战。

m0_73941339的博客 1331

为什么会存在Java包装类

一、包装类基本概念 1、Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class) 2、包装类均位于java.lang 包。其中数字型包装类位于java.lang.Number,字符型位于java.lang.Character ,布尔型位于java.lang.Boolean 3、可以看到,8种基本数据类型都有其对应的包...

花自落 436
上一篇: MyBatis配置文件resultMap可省略的情况
下一篇: 一些小细节让你的Java程序性能大幅提高
LiQiyaoo
博客等级 码龄11年 337粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值