Java 中 equals 和 == 的区别是什么?(超详细)

更新时间 2023-03-23 22:31:17

在 Java 中,==equals() 都用于比较两个对象是否相等。它们之间的区别在于:

  1. == 是个操作符,比较的是 两个对象的内存地址是否相等。如果两个对象的内存地址相等,即它们指向同一块内存区域,那么它们相等,否则不相等。示例代码:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // 输出 true,因为它们指向同一个对象
System.out.println(str1 == str3); // 输出 false,因为它们指向不同的对象
  1. equals() 是个方法,比较的是 两个对象的内容是否相等。默认情况下,equals() 方法与 == 操作符的行为相同,即它比较的是两个对象的内存地址。但是,可以通过重写 equals() 方法来实现比较对象的内容是否相等。示例代码:
public 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 (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        
        Person other = (Person) obj;
        return Objects.equals(name, other.name) && age == other.age;
    }
}

Person person1 = new Person("张三", 18);
Person person2 = new Person("张三", 18);
Person person3 = new Person("李四", 20);
System.out.println(person1.equals(person2)); // 输出 true,因为它们的内容相等
System.out.println(person1.equals(person3)); // 输出 false,因为它们的内容不相等

需要注意的是,重写 equals() 方法时,应该同时重写 hashCode() 方法,以确保对象在放入哈希表等数据结构中能够正确工作。

总结

综上所述,如果您想要比较两个对象的内容是否相等,应该使用 equals() 方法。如果您只想比较两个对象的内存地址是否相等,可以使用 == 操作符