Java中equals與==的本質區別是什麼?

三郎君發表於2020-10-19

equals與的區別

==

比較的是變數(棧)記憶體中存放的物件的(堆)記憶體地址,用來判斷兩個物件的地址是否相同,即是否是
指相同一個物件。比較的是真正意義上的指標操作。
1、比較的是操作符兩端的運算元是否是同一個物件。
2、兩邊的運算元必須是同一型別的(可以是父子類之間)才能編譯通過。
3、比較的是地址,如果是具體的阿拉伯數字的比較,值相等則為true,如:
int a=10 與 long b=10L 與 double c=10.0都是相同的(為true),因為他們都指向地址為10的堆。
equals:

public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father s = new Father();
s.sayHello();
s.sayHello("wintershii");
}
public void sayHello() {
System.out.println("Hello");
}
public void sayHello(String name) {
System.out.println("Hello" + " " + name);
}
}

equals

用來比較的是兩個物件的內容是否相等,由於所有的類都是繼承自java.lang.Object類的,所以
適用於所有物件,如果沒有對該方法進行覆蓋的話,呼叫的仍然是Object類中的方法,而Object中的
equals方法返回的卻是== 的判斷。
總結:
所有比較是否相等時,都是用equals 並且在對常量相比較時,把常量寫在前面,因為使用object的
equals object可能為null 則空指標
在阿里的程式碼規範中只使用equals ,阿里外掛預設會識別,並可以快速修改,推薦安裝阿里外掛來排
查老程式碼使用“==”,替換成equals

相關文章