Java中equals和==的區別總結
阿新 • • 發佈:2018-11-23
1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;如果作用於引用型別的變數,則比較的是所指向的物件的地址。
2)對於equals方法,equals方法是Object的,所有繼承了Object類的類都有該方法,注意:equals方法不能作用於基本資料型別的變數
祖宗類Object中的equals方法比較的是兩個物件地址是否相等,即是否為同一個物件,但一些類對該方法進行了重寫,如果沒有對equals方法進行重寫,則比較的是引用型別的變數所指向的物件的地址;
諸如String、Date、基本資料型別的封裝類等類對equals方法進行了重寫的話,比較的是所指向的物件的內容。(至於還有沒有及其他類重寫了equals方法還需讀者自己去發現)
程式碼示例:
public class Demo1 { public static void main(String[] args) { Integer a = 299;//當要賦的值在[-128~127]範圍內,則會直接指向該值的引用,不用去new 個物件到堆記憶體中去了。因為 Integer已經快取了資料。 Integer b = 299; System.out.println("a.equals(b) " + a.equals(b)); System.out.println("a==b " + (a==b)); Integer a1 = 2; Integer b1 = 2; System.out.println("a1.equals(b1) "+a1.equals(b1)); System.out.println("a1==b1 " +(a1==b1)); String str = "b"; String c = "aaa" + str; String d = "aaab"; System.out.println("c.equals(d) " +c.equals(d)); System.out.println("c==d " +(c==d)); } }
執行結果:
a.equals(b) true
a == b false
a1.equals(b1) true
a1 == b1 true
c.equals(d) true
c == d false
如有不足還請各位大神多多指教
作者:愛撿貝殼的小男孩
版權宣告:本文為博主原創文章,轉載請附上博文連結!