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

问题:

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

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

相关推荐
生命因何探索几秒前
SpringBoot启动流程—面试热点
java·spring boot·面试
小乔的编程内容分享站1 分钟前
C语言笔记之结构体第二篇
c语言·开发语言·笔记
xiaoye37083 分钟前
如何在Spring中使用注解解决线程并发问题?
java·后端·spring
future02104 分钟前
Spring IOC启动全流程解密
java·后端·spring·ioc
codeJinger4 分钟前
【Python】集合
开发语言·python
太阳神LoveU5 分钟前
Spring Boot 4.0.3和3.X的各个版本主要功能差别和优劣势对比
java·spring boot·后端
俩娃妈教编程6 分钟前
C++基础知识点:位运算
java·开发语言·jvm·c++·位运算
zhoupenghui1686 分钟前
golang 锁实现原理与解析&锁机制(sync)种类与举例说明以及其使用场景
开发语言·后端·golang·mutex·wait·lock·sync
路弥行至10 分钟前
linux运行脚本出现错误信息 /bin/bash^M: bad interpreter解决方法
linux·运维·开发语言·经验分享·笔记·其他·bash
一直不明飞行12 分钟前
C++ pari使用的两个注意事项
开发语言·c++