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

问题:

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

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

相关推荐
阿巴斯甜4 分钟前
userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge()); 怎么判断是升序还是降序?
java
小松加哲4 分钟前
AspectJ编译期织入实战
java·开发语言
鲸渔5 分钟前
【C++ 跳转语句】break、continue、goto 与 return
开发语言·c++·算法
贺小涛7 分钟前
python和golang进程、线程、协程区别
java·python·golang
Seven9718 分钟前
Tomcat的架构设计和启动过程详解
java
Mr-Wanter19 分钟前
踩坑记录:IDEA 启动服务连续三次 OOM 内存溢出完整解决
java·ide·intellij-idea·oom
阿巴斯甜22 分钟前
User::getName含义?
java
喜欢吃燃面29 分钟前
Linux 进程信号深度解析:从概念到产生机制
linux·开发语言·学习
2601_9498180929 分钟前
SpringBoot项目集成ONLYOFFICE
java·spring boot·后端
AI玫瑰助手31 分钟前
Python基础:字符串的常用内置方法(查找替换分割)
android·开发语言·python