.equals()
方法在 Java 中是 Object
类的一个方法,它用于比较对象的“内容”是否相等,而不仅仅是比较它们的引用地址。不同于 ==
直接比较两个对象的内存地址,.equals()
方法通常被类重写来根据对象的内容来判断相等。
.equals()
适用的类型:
1. String
类型:
- String
是最常见的重写了 .equals()
方法的类型之一。String
类中的 .equals()
方法是用来比较两个字符串的内容是否相等,而不是它们的引用地址。
String str1 = "hello";
String str2 = new String("hello");
// 使用 == 比较的是对象引用地址
System.out.println(str1 == str2); // 输出 false,因为 str1 和 str2 是不同的对象
// 使用 .equals() 比较的是字符串内容
System.out.println(str1.equals(str2)); // 输出 true,因为 str1 和 str2 的内容相同
2. Integer
、Double
、Boolean
等包装类:
- 类似于 String
类,Java 中的其他一些包装类(如 Integer
、Double
、Boolean
等)也重写了 .equals()
方法,用于比较它们的值,而不是它们的内存地址。
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2); // 输出 true,因为 Java 会缓存值在一定范围内(-128 到 127),直接比较的是值
System.out.println(num1.equals(num2)); // 输出 true,因为 .equals() 比较的是内容(值)
3. List
、Set
、Map
等集合类:
- Java 集合类(如 List
、Set
、Map
等)都重写了 .equals()
方法,用于判断两个集合的内容是否相等。
List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("b");
System.out.println(list1 == list2); // 输出 false,因为 list1 和 list2 是两个不同的对象
System.out.println(list1.equals(list2)); // 输出 true,因为 list1 和 list2 的内容相同
4. Date
类(java.util.Date
):
- Date
类也重写了 .equals()
方法,来比较两个日期对象是否表示相同的时间点。
Date date1 = new Date(2024, 11, 6); // 注意:构造函数已被废弃,不推荐使用
Date date2 = new Date(2024, 11, 6);
System.out.println(date1.equals(date2)); // 输出 true,因为 date1 和 date2 表示相同的时间
5. 自定义对象(类):
- 当你创建自定义类时,你通常会重写 .equals()
方法来根据自定义的业务逻辑比较两个对象的内容。例如,你可能会基于对象的某些字段(如 id
或 name
)来判断两个对象是否相等。
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
Person person1 = new Person("John", 30);
Person person2 = new Person("John", 30);
System.out.println(person1.equals(person2)); // 输出 true,因为内容相同
.equals()
方法的总结:
.equals()
是比较两个对象的内容是否相等。- 对于一些常见的类,如
String
、Integer
、Date
等,它们都会根据自己的实现来重写.equals()
方法。 - 自定义类也可以通过重写
.equals()
来实现自己的比较规则。 - 如果不重写
.equals()
方法,默认实现是比较对象的引用地址(即==
的效果)。
在判断对象是否相等时,如果是基于对象的内容进行比较(如字符串内容、数值等),推荐使用 .equals()
方法。如果是比较引用地址,则使用 ==
。