必须用equals()比较包装类值,因==比较内存地址不可靠;推荐用objects.equals()避免空指针;仅需相等判断时不用compareto()。

用 equals() 方法比较,是最稳妥、最推荐的方式。
为什么必须用 equals()?
包装类(如 Integer、Long、Boolean 等)是引用类型,== 比较的是对象内存地址,不是数值本身。虽然某些情况下 == 看似能返回 true,但那只是缓存机制带来的巧合,不可靠。
-
Integer i1 = 127; Integer i2 = 127;→i1 == i2为 true(复用缓存对象) -
Integer i3 = 128; Integer i4 = 128;→i3 == i4为 false(各自新建对象) - 但
i1.equals(i2)和i3.equals(i4)都是 true,因为它们比较的是封装的 int 值
如何安全地调用 equals()?
直接调用包装类对象的 equals() 可能因对象为 null 导致空指针异常。更健壮的做法是:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 使用
java.util.Objects.equals(a, b)—— 它内部做了 null 判断,安全且简洁 - 避免用可能为 null 的变量去调用
.equals(),比如str.equals("abc")中 str 为 null 就会报错
其他可靠替代方式
如果明确知道两个对象都不为 null,也可通过自动拆箱后用基本类型比较:
int a = obj1 != null ? obj1.intValue() : 0;int b = obj2 != null ? obj2.intValue() : 0;if (a == b) { ... }
但这种方式需手动处理 null,代码冗长,不推荐作为首选。
compareTo() 适合什么场景?
compareTo() 主要用于排序或需要判断大小关系(大于/小于/等于)时,它返回负数、0 或正数。它也要求对象非 null,否则抛 NullPointerException。若仅需判断是否相等,equals() 或 Objects.equals() 更直观、更安全。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










