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

问题:

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

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

相关推荐
惊讶的猫3 分钟前
nia500总结
java·spring·mybatis
钟离墨笺3 分钟前
Go语言-->interfance{}赋值的陷阱
开发语言·后端·golang
逆境清醒10 分钟前
Python中的常量
开发语言·python·青少年编程
aini_lovee13 分钟前
基于MATLAB的DC-DC变换器设计与实现(Buck/Boost/Buck-Boost)
开发语言·matlab
奔跑吧 android13 分钟前
【ubuntu24.04】【安装jdk】
java·开发语言
BUTCHER525 分钟前
Java 启动服务时指定JVM(Java 虚拟机)的参数配置说明
java·开发语言·jvm
l1t28 分钟前
利用豆包辅助编写数独隐式唯一数填充c程序
c语言·开发语言·人工智能·算法·豆包·deepseek
sheji341631 分钟前
【开题答辩全过程】以 会议室场地预约系统为例,包含答辩的问题和答案
java
摇滚侠44 分钟前
尚硅谷 Java 零基础全套视频教程,System、Runtime、BigDecimal、BigInteger、Random,笔记 151
java·开发语言·笔记
fo安方1 小时前
软考~系统规划与管理师考试——真题篇——章节——第5章 应用系统规划——解析版
java·运维·网络