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

问题:

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

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

相关推荐
老毛肚10 分钟前
Spring boot 特性和自写Reids组件
java·spring boot·后端
小a杰.18 分钟前
Ascend C算子开发实战 - 从零开始写算子
c语言·开发语言
雪度娃娃20 分钟前
Asio异步读写——连接的安全回收问题
开发语言·c++·安全·php
baivfhpwxf202326 分钟前
c# 中对像之间频繁的转换会慢吗?
开发语言·c#
极光代码工作室26 分钟前
基于SpringBoot的课程管理系统
java·springboot·web开发·后端开发
SilentSamsara27 分钟前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
JustNow_Man30 分钟前
【opencode】安装使用daytona沙箱插件
android·java·javascript
不吃土豆的马铃薯32 分钟前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
武子康1 小时前
Java-05 深入浅出 MyBatis动态SQL与参数拼接完全指南
java·spring boot·后端
水木流年追梦1 小时前
大模型入门-大模型的推理策略
开发语言·python·算法·正则表达式·prompt