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

问题:

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

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

相关推荐
五阿哥永琪几秒前
Hutool中常用的工具类&真实项目的黄金组合
java
CCPC不拿奖不改名3 分钟前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试
xun-ming4 分钟前
Redis实战之7种数据结构
java
5***84649 分钟前
Spring Boot的项目结构
java·spring boot·后端
SimonKing9 分钟前
基于Netty的TCP协议的Socket客户端
java·后端·程序员
程序员飞哥10 分钟前
几年没面试,这次真的被打醒了!
java·面试
代码游侠12 分钟前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
Learner20 分钟前
Python异常处理
java·前端·python
tao35566723 分钟前
VS Code登录codex,报错(os error 10013)
java·服务器·前端
superman超哥24 分钟前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程