两个包装类型变量的比较问题

问题:

由于受包装类的自动装箱和拆箱的影响,一直以为直接用==直接比较两个包装类的大小是否相等就可以,惭愧。比如:

复制代码
Integer a=11;
Integer b=11;
System.out.println(a==b);

运行结果是 true,似乎没啥问题,但是改一下变量的值就不行了,比如:

复制代码
Integer a=199;
Integer b=199;
System.out.println(a==b);

结果就是false了。

为什么:

我们都知道==本质上比较的是对象的地址是否相等,包装类的变量也是对象,a和b是两个不同的对象,那么==来比较的话肯定是不相等的,而第一个例子之所以是true,是因为java对常用数字的特殊优化处理,使得Integer类型的引用在-127~127这个范围内都指向一个对象,在这个数据范围之外的就是不同的两个对象

总结:

记住一点,对象比较就用equals,基础数据类型就用==来比较,就不会出错。

相关推荐
Flittly4 分钟前
【AgentScope Java新手村系列】(4)结构化输出
java·spring boot·spring·ai
wzg19690226wzg5 分钟前
rust 学习 泛型
开发语言·学习·rust
techdashen7 分钟前
Rust 基础设施团队 2025 Q4 回顾与 2026 Q1 计划
开发语言·后端·rust
红宝村村长7 分钟前
torch.autograd.Function.apply()
开发语言·python
AI科技星8 分钟前
《数术工坊:非欧射影录》类型:硬核光影·几何本源
c语言·开发语言·网络·量子计算·agi
何以解忧,唯有..16 分钟前
Python 中的继承机制:从基础到高级用法详解
java·开发语言·python
Yiyaoshujuku21 分钟前
化合物数据集API接口(数据结构及样例)
java·网络·数据结构
plainGeekDev33 分钟前
算法刷题笔记:一维DP没那么难,状态想清楚就赢了一半
java·算法·面试
IceBing39 分钟前
还在一个个连接 Arthas?这个开源平台支持批量诊断 JVM
java
SL_staff1 小时前
《如何用规则引擎替代if-else?JVS-Rules可视化编排比硬编码强在哪里?》
java·低代码·架构