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

问题:

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

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

相关推荐
m0_686041611 天前
C++中的策略模式应用
开发语言·c++·算法
沉默-_-1 天前
力扣hot100普通数组(1)--C++
java·数据结构·算法·leetcode·数组
colicode1 天前
java短信接口开发对接全流程:Spring Boot项目集成短信功能详解
java·开发语言·spring boot
qq_351754781 天前
关于vue3切换空白页问题解决
开发语言·前端
HalvmånEver1 天前
Linux:线程的概念、与进程区别及内核实现(线程一)
java·linux·运维
一晌小贪欢1 天前
Python JSON 处理最佳实践:从入门到构建健壮的容错系统
开发语言·python·json·字典·python字典·python办公
晓13131 天前
第四章:Redis实战应用及常见问题(下篇)
java·数据库·缓存·wpf
量子炒饭大师1 天前
【C++入门】Cyber霓虹镜像城的跨域通行证 —— 【友元(friend)】跨类协作破坏封装性?友元函数与友元类为你架起特权桥梁!
java·开发语言·c++·友元函数·友元类·friend
小程同学>o<1 天前
嵌入式之C/C++(一)关键字
c语言·开发语言·c++·嵌入式软件面试
diediedei1 天前
C++构建缓存加速
开发语言·c++·算法