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

问题:

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

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

相关推荐
酷酷的身影7 分钟前
Drivers/LedManager.cs
开发语言·php
卓怡学长10 分钟前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
小樱花的樱花15 分钟前
Linux 线程的创建
linux·c语言·开发语言
xiaoshuaishuai835 分钟前
C# AI实现PR处理、单元测试
开发语言·c#·log4j
C++、Java和Python的菜鸟35 分钟前
第7章 Java高级技术
java·开发语言
LONGZHIQIN38 分钟前
C#基础复习笔记
开发语言·笔记·c#
程序员佳佳1 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
可靠的仙人掌1 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php
学逆向的1 小时前
汇编——数据存储模式
开发语言·汇编·网络安全
geovindu1 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式