Java 中 equals 和 == 的区别是什么?(超详细)
在 Java 中,==
和 equals()
都用于比较两个对象是否相等。它们之间的区别在于:
==
是个操作符,比较的是 两个对象的内存地址是否相等。如果两个对象的内存地址相等,即它们指向同一块内存区域,那么它们相等,否则不相等。示例代码:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // 输出 true,因为它们指向同一个对象
System.out.println(str1 == str3); // 输出 false,因为它们指向不同的对象
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()
方法。如果您只想比较两个对象的内存地址是否相等,可以使用 ==
操作符