Java中如何判断两个变量是否相等
作者:EasyWind
时间:2026-02-04
浏览:0
Java中比较变量相等需区分值相等与引用相等:基本类型用==比较值,引用类型优先用equals()比较内容,避免直接用==;包装类因缓存机制导致==结果不可靠;自定义类须重写equals()和hashCode()。
Java中比较变量相等需区分值相等与引用相等:基本类型用==比较值,引用类型优先用equals()比较内容,避免直接用==;包装类因缓存机制导致==结果不可靠;自定义类须重写equals()和hashCode()。

Java中比较两个变量是否相等,关键在于区分“值相等”和“引用相等”,并根据变量类型(基本类型或引用类型)选择合适的方式。
基本类型用 == 比较值
int、double、char、boolean 等基本类型变量,直接用 == 判断数值是否相同:
- == 对基本类型比较的是实际存储的值
- 例如:
int a = 5; int b = 5;,a == b返回 true - 注意:浮点数(float/double)用 == 比较可能存在精度问题,建议用
Math.abs(a - b) < EPSILON判断近似相等
引用类型慎用 ==,优先用 equals()
String、Integer、ArrayList 等引用类型,== 比较的是两个变量是否指向**同一个对象(内存地址)**,不是内容是否相同:
String s1 = "hello"; String s2 = "hello";→s1 == s2可能为 true(字符串常量池优化)String s1 = new String("hello"); String s2 = new String("hello");→s1 == s2一定为 false- 要比较内容是否一致,应调用 .equals() 方法:
s1.equals(s2)返回 true - 使用前建议判空,避免 NullPointerException:
Objects.equals(s1, s2)更安全
包装类的特殊性:== 在小整数范围内可能“碰巧”成立
Integer、Byte、Character 等包装类有缓存机制(如 Integer 缓存 -128 ~ 127),导致部分值用 == 比较会返回 true,但这不是可靠行为:
Integer a = 100; Integer b = 100;→a == b是 true(命中缓存)Integer c = 200; Integer d = 200;→c == d很可能是 false(超出缓存范围)- 始终用
.equals()或Objects.equals()判断逻辑相等,不依赖 ==
自定义类要重写 equals() 和 hashCode()
如果自己写的类需要按业务字段判断是否相等,必须重写 equals() 方法(通常也需同步重写 hashCode()):
- 默认继承自 Object 的 equals() 等价于 ==,只比地址
- 重写后可按 id、name 等字段组合判断,例如:
return Objects.equals(this.id, other.id) && Objects.equals(this.name, other.name); - 若该类对象会放入 HashMap / HashSet,未重写 hashCode() 会导致逻辑异常
作者最新文章
淘宝闪购“等灯不计时”机制解析:政策、技术与多方协同
2026-09-08 18:00
一加自研电竞三芯P4/G3/T3确认:一加16首发,支持185FPS及9000mAh电池
2026-09-08 16:52
抖音拍摄剪辑教程:从竖屏运镜到卡点成片
2026-09-03 06:05
Excel筛选大于指定数值:操作步骤与结果验证
2026-09-03 06:03
PDF添加文字水印:位置、透明度与字号设置指南
2026-09-03 06:01
上一篇:
决胜巅峰一周年活动有什么-一周年活动介绍
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































