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

问题:

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

复制代码
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,基础数据类型就用==来比较,就不会出错。

相关推荐
luod5 小时前
RabbitMQ简单生产者和消费者实现
java·rabbitmq
weixin_421133415 小时前
PGN + SHield
开发语言
弥巷5 小时前
【Android】深入理解Window和WindowManager
android·java
前进的李工5 小时前
SQL排序与分页查询技巧
开发语言·数据库·sql·mysql·oracle
okseekw5 小时前
Java抽象类详解:从“不能生孩子”的类到模板设计模式实战
java
信看5 小时前
CM4树莓派开机功能-1️⃣固定网卡
开发语言·python
噜啦噜啦嘞好5 小时前
生产者消费者模型
linux·开发语言
古城小栈5 小时前
Spring中 @Transactional 和 @Async注解 容易不消停
java·spring
Blossom.1185 小时前
基于Qwen2-VL+LayoutLMv3的智能文档理解系统:从OCR到结构化知识图谱的落地实践
开发语言·人工智能·python·深度学习·机器学习·ocr·知识图谱
FuckPatience5 小时前
C# 补码
开发语言·算法·c#