在Java程序中,我們經常使用"=="和"equals"兩個運算符來比較兩個對象是否相等。兩者看起來很相似,但實際上有著本質的區別。
public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public boolean equals(Object obj) { if(this == obj) { return true; } if(!(obj instanceof Person)) { return false; } Person other = (Person) obj; return age == other.age && name.equals(other.name); } } public class Main { public static void main(String[] args) { Person p1 = new Person(18, "Tom"); Person p2 = new Person(18, "Tom"); System.out.println(p1 == p2); // false System.out.println(p1.equals(p2)); // true } }
"=="運算符比較的是對象的引用地址是否相同,即是否指向同一個對象。例如上面的代碼中,p1和p2雖然屬性相同,但它們是兩個不同的對象,所以"=="運算符比較結果是false。
而"equals"方法比較的是對象的內容是否相等,即屬性是否相同。上面的代碼中,Person類重寫了"equals"方法,比較的是對象的屬性age和name是否相等。所以,p1.equals(p2)返回true。
總結:
"=="比較對象的引用地址,而equals方法比較對象的內容。