equals與==的區別

equals與==的區別

==:

  1. 比較的是棧內存中存放的對象的堆內存地址,判斷兩個引用是否指向同一個對象。
  2. 兩邊操作的數據必須是同一類型(可以是父子類)才能通過編譯。
  3. 比較的是地址,int a=10 與 long b=10L 與 double c=10.0都是相同的(爲true),因爲他們都指向地址爲10的堆。

equals:

  1. equals用來比較兩個對象的內容是否相等。
  2. equals是Object類的方法,適用於所有對象。(不能用來比較基本數據類型)
  3. 默認的equals方法就是==,String、Integer等類對equals進行了重寫。
  4. String str = “ab"和String str2=new String()不同,它是java中唯一不需要new就可以產生對象的方式。它存儲在常量池中(JVM會在常量池中先查找有有沒有一個值爲"ab"的對象,如果有,就會把它賦給當前引用。即原來那個引用和現在這個引用指點向了同一對象,如果沒有,則在常量池中新創建一個"abcd”。任何多個引用都指向同一對象)。
對equals重新需要注意五點:
  1. 自反性:對任意引用值X,x.equals(x)的返回值一定爲true;
  2. 對稱性:對於任何引用值x,y,當且僅當y.equals(x)返回值爲true時,x.equals(y)的返回值一定爲true;
  3. 傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true ;
  4. 一致性:如果參與比較的對象沒任何改變,則對象比較的結果也不應該有任何改變;
  5. 非空性:任何非空的引用值X,x.equals(null)的返回值一定爲false 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章