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

问题:

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

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

相关推荐
程序员-周李斌14 小时前
ArrayBlockingQueue 源码解析
java·开发语言·后端·哈希算法·散列表
Tim_1014 小时前
【C++入门】02、C++程序初识
开发语言·c++
编程修仙14 小时前
第一篇 认识SpringBoot
java·spring boot
骇客野人14 小时前
.gitignore文件常用设置
java
lkbhua莱克瓦2414 小时前
项目知识——Next.js App Router体系
开发语言·javascript·项目知识
bill44714 小时前
BPMN2.0,flowable工作流,【用户任务】使用【任务监听器】动态设置下一步处理人
java·工作流引擎·flowable·bpmn
Cricyta Sevina14 小时前
Java 语言多线程核心概念全解析
java·开发语言
缘三水14 小时前
【C语言】15.指针(5)
c语言·开发语言·指针·语法
爱吃大芒果14 小时前
从零开始学 Flutter:状态管理入门之 setState 与 Provider
开发语言·javascript·flutter