返回

==,equals() 与 hashCode() 的使用

后端

在 Java 编程中,使用 == 运算符比较对象引用是否指向同一对象,而 equals() 方法比较两个对象的内容是否相同。hashCode() 方法返回对象的哈希码,它是一个整数,用于标识对象。

== 运算符

== 运算符用于比较两个引用是否指向同一对象。对于基本数据类型,它直接比较值。对于对象,它比较对象的引用,而不是对象的内容。

int a = 10;
int b = 10;

System.out.println(a == b); // true, a 和 b 指向相同的值

String str1 = "Hello";
String str2 = "Hello";

System.out.println(str1 == str2); // true, str1 和 str2 指向相同的字符串常量

Person person1 = new Person();
Person person2 = new Person();

System.out.println(person1 == person2); // false, person1 和 person2 指向不同的对象

equals() 方法

equals() 方法用于比较两个对象的实际内容是否相同。它通常被重写以自定义比较行为。

class Person {
    private String name;
    private int age;

    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;
        return name.equals(person.name) && age == person.age;
    }
}

Person person1 = new Person();
person1.setName("John");
person1.setAge(30);

Person person2 = new Person();
person2.setName("John");
person2.setAge(30);

System.out.println(person1.equals(person2)); // true, person1 和 person2 内容相同

hashCode() 方法

hashCode() 方法返回对象的哈希码。哈希码是一个整数,用于标识对象。它通常用于数据结构中,例如哈希表。

class Person {
    private String name;
    private int age;

    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Person person1 = new Person();
person1.setName("John");
person1.setAge(30);

System.out.println(person1.hashCode()); // 返回一个整数哈希码

总结

  • 使用 == 运算符比较对象引用。
  • 使用 equals() 方法比较对象内容。
  • 使用 hashCode() 方法获取对象的哈希码。