Java是一門面向對象的編程語言,至關重要的一部分是判斷兩個對象是否相等。在Java中,我們有兩種基本的相等性操作:==和equals()方法。
==操作符用于比較兩個變量的值是否相等,當然也可以用于比較兩個對象的引用是否指向同一個內存地址。例如:
int a = 5; int b = 5; if(a == b){ System.out.println("a等于b"); } String str1 = new String("hello"); String str2 = new String("hello"); if(str1 == str2){ System.out.println("str1和str2引用同一個內存地址"); }
需要注意的是,在上面的例子中,雖然str1和str2所指向的字符串值相等,但因為它們是通過new關鍵字分別創建的,因此它們在內存中的引用是不同的,即它們引用了不同的內存地址。
相比之下,equals()方法是用于比較兩個對象的值是否相等。String和其他Java內置類型的equals()方法已經被重寫以支持值比較,但對于自定義對象來說,我們需要在類中手動重寫equals()方法。例如:
public class Person { private int id; private String name; //getters and setters @Override public boolean equals(Object obj) { if(obj == null) { return false; } if(!(obj instanceof Person)) { return false; } Person comparedPerson = (Person)obj; return (this.id == comparedPerson.getId() && this.name.equals(comparedPerson.getName())); } } Person person1 = new Person(1, "Tom"); Person person2 = new Person(1, "Tom"); if(person1.equals(person2)){ System.out.println("person1和person2的值相等"); }
需要注意的是,為了在比較對象值時確保正確性,equals()方法必須重寫hashCode()方法。