返回
手撕代码判断两个对象是否相等
前端
2023-09-29 13:08:06
在实际项目开发中,判断两个对象是否相等可能是比较常见的需求了,有些小伙伴会使用第三方库实现,有些小伙伴会自己手动实现。不管怎么实现,只要能满足项目需求,那就是好样的。
1. Object类equals方法
在Java中,Object类提供了一个equals方法,用于比较两个对象是否相等。该方法的声明如下:
public boolean equals(Object obj)
如果两个对象相等,则返回true;否则,返回false。
2. Java对象比较
Java对象比较主要分为浅比较和深比较。
- 浅比较 :浅比较只比较两个对象的引用是否相等。如果两个对象的引用相等,则认为这两个对象相等;否则,认为这两个对象不相等。
- 深比较 :深比较比较两个对象的属性值是否相等。如果两个对象的属性值都相等,则认为这两个对象相等;否则,认为这两个对象不相等。
3. 比较对象值
比较对象值可以使用equals方法。例如,以下代码比较两个字符串对象是否相等:
String str1 = "Hello";
String str2 = "Hello";
if (str1.equals(str2)) {
System.out.println("两个字符串相等");
} else {
System.out.println("两个字符串不相等");
}
输出结果为:
两个字符串相等
4. 比较对象引用
比较对象引用可以使用==操作符。例如,以下代码比较两个字符串对象的引用是否相等:
String str1 = "Hello";
String str2 = "Hello";
if (str1 == str2) {
System.out.println("两个字符串引用相等");
} else {
System.out.println("两个字符串引用不相等");
}
输出结果为:
两个字符串引用不相等
这是因为,虽然两个字符串对象的值相同,但是它们的引用不同。
5. hashCode方法
hashCode方法是Object类提供的另一个方法,用于返回对象的哈希码。哈希码是一个整数,用于唯一标识一个对象。两个对象如果相等,那么它们的哈希码也必须相等。但是,两个对象不相等,它们的哈希码也不一定不相等。
6. 浅比较和深比较的示例代码
以下代码演示了浅比较和深比较的示例代码:
public class Main {
public static void main(String[] args) {
// 浅比较
String str1 = "Hello";
String str2 = "Hello";
if (str1 == str2) {
System.out.println("两个字符串引用相等");
} else {
System.out.println("两个字符串引用不相等");
}
// 深比较
Person person1 = new Person("张三", 20);
Person person2 = new Person("张三", 20);
if (person1.equals(person2)) {
System.out.println("两个对象相等");
} else {
System.out.println("两个对象不相等");
}
}
}
class Person {
private String name;
private int age;
public 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 name.equals(person.name) && age == person.age;
}
}
输出结果为:
两个字符串引用相等
两个对象不相等
这是因为,虽然两个字符串对象的引用相等,但是它们的属性值不同。而两个Person对象的属性值相同,但是它们的引用不同。