📅  最后修改于: 2023-12-03 15:01:49.564000             🧑  作者: Mango
在Java中,==
和 .equals()
两个方法都是用来比较两个对象是否相等。但是它们之间有很大的区别。
==
==
方法比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象的内存地址相同,则它们是相等的。
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // true,因为s1和s2都指向同一个对象
System.out.println(s1 == s3); // false,因为s1和s3指向不同的对象
.equals()
.equals()
方法比较的是两个对象的内容是否相等,即它们是否具有相同的值。默认情况下,它比较的是两个对象的内存地址,因为所有的Java类都继承自Object
类,而Object
类中的.equals()
方法是比较两个对象的内存地址。
如果需要比较两个对象的内容是否相等,可以在自定义的类中重写.equals()
方法。一般情况下,重写.equals()
方法时还需要重写.hashCode()
方法。
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 o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2)); // true
System.out.println(p1 == p2); // false
.equals()
方法比较的是两个对象的内容是否相等,需要在自定义的类中重写。而==
方法比较的是两个对象的内存地址是否相等。对于Java中的基本数据类型,==
方法和.equals()
方法都比较的是它们的值是否相等。