Objects.equals() 和 Object.equals() 的区别:
1. Objects.equals()
是静态方法
✅ 正确写法:Objects.equals(a, b)
-
来自
java.util.Objects
工具类(注意是 Objects,带s
) -
是 静态方法,直接用类名调用
-
作用:安全比较两个对象是否相等(包括处理
null
值)import java.util.Objects; Objects.equals(name, user.name); // 正确用法
优势:
-
如果
name
或user.name
为null
,不会抛NullPointerException
-
等价于:
(name == user.name) || (name != null && name.equals(user.name))
2. Object.equals()
是实例方法
❌ 错误写法:Object.equals(a, b)
-
来自
java.lang.Object
基类(没有s
) -
是 实例方法,必须用对象实例调用:
name.equals(user.name); // 可能抛NullPointerException
风险:
-
如果
name
为null
,会抛出NullPointerException
关键区别:
特性 | Objects.equals() | Object.equals() |
---|---|---|
所属类 | java.util.Objects | java.lang.Object |
方法类型 | 静态方法 | 实例方法 |
null 安全性 | ✅ 安全 | ❌ 可能抛异常 |
调用方式 | Objects.equals(a,b) | a.equals(b) |
为什么设计成两个?
-
历史原因:
-
Object.equals()
是Java最初的设计 -
Objects.equals()
是Java 7新增的,专门解决null
安全问题
-
-
使用场景:
-
当你 控制对象不为null 时可以用
objectA.equals(objectB)
-
当可能为
null
时,必须用Objects.equals(a, b)
-
示例对比
String a = null;
String b = "hello";
// 危险写法(会抛异常)
a.equals(b); // ❌ NullPointerException
// 安全写法
Objects.equals(a, b); // ✅ 返回 false
建议在重写 equals()
时,一律使用 Objects.equals()
来比较字段,这是最安全的做法。