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

问题:

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

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

相关推荐
硕风和炜7 分钟前
【LeetCode: 1301. 最大得分的路径数目 + DP】
java·算法·leetcode·动态规划·dp·记忆化搜索
SamDeepThinking18 分钟前
面向对象真正管理的,不是对象,而是依赖
java·后端·程序员
努力中的编程者28 分钟前
STL-vector的模拟实现
开发语言·c++·算法·stl·vector
薛定猫AI1 小时前
【深度解析】GLM-5.2 与 Z-Code:AI 编程智能体的原理拆解与 Python 调用实战
开发语言·人工智能·python
没文化的阿浩1 小时前
【C++】详解继承机制
开发语言·c++
文祐1 小时前
C语言用双向链表实现单调递减(递增)队列
c语言·开发语言·链表
雪的季节1 小时前
OCR: windows 环境基于c++的 paddle ocr 编译【CPU版本】编译成dll ,在QT、VS中调用
开发语言
剑挑星河月1 小时前
94.二叉树的中序遍历
java·算法·leetcode
2301_801184751 小时前
docker 工作
java·docker·容器
蒟蒻的贤1 小时前
python搭建MiniDL
开发语言·python·深度学习