equals vs ==
| 对比项 | == 运算符 | equals() 方法 |
|---|
| 比较对象 | 内存地址(引用是否指向同一对象) | 对象内容是否逻辑相等(可自定义) |
| 适用类型 | 基本类型(int, char 等)和引用类型 | 仅引用类型(对象) |
| 默认行为 | 比较地址(引用类型)或值(基本类型) | 默认与 == 相同(Object 类实现) |
| 可重写性 | 不可重写(Java 语言运算符) | 可重写(自定义比较逻辑) |
null 安全性 | 直接使用(null == obj 安全) | 需判空(obj.equals(null) 可能抛异常) |
- 默认情况下(
Object类的实现),equals()和 ==一样,比较的是内存地址
public boolean equals(Object obj) {
return (this == obj);
}
- 但许多类(如 String、Integer、自定义类)会 重写 equals(),使其比较内容而非地址。
String s1 = "hello";
String s2 = new String("hello");
String s3 = "hello";
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);
System.out.println(s1 == s3);