Java作為一種面向對象的編程語言,經常用到比較兩個對象是否相等。在Java中,判斷兩個對象是否相等有兩種方式,即使用equal和=。
首先,需要明確的是,equal和=是有很大區別的。equal用于比較兩個對象的內容是否相等,而=則是用于將一個對象的引用賦值給另一個對象。也就是說,equal用于比較對象的值,而=用于改變對象的引用。
public class Person {
private String name;
private int age;
public Person(String n, int a) {
name = n;
age = a;
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("張三", 20);
Person p2 = new Person("張三", 20);
System.out.println(p1.equals(p2)); //true
System.out.println(p1 == p2); //false
}
}
當我們調用p1.equals(p2)時,首先會判斷p1和p2是否是同一個對象,如果是則直接返回true,否則就判斷p2是否為null以及p1和p2是否屬于同一個類。如果屬于同一個類,就將p2強制轉換成Person類型,并比較p1和p2的age和name屬性是否相等。
而當我們使用p1 = p2時,其實是將p2的引用賦值給p1。也就是說,p1和p2引用的是同一個對象。所以,當我們使用==比較p1和p2時,結果為false。
總而言之,當需要比較兩個對象是否相等時,應該使用equal方法;而當需要將一個對象的引用賦給另一個對象時,應該使用=號。