equals 和 ==

高高2020…發表於2020-10-30

equals

equals繼承Object類的基本方法,預設是按==比較
在這裡插入圖片描述

‘’= =’’

==比較八大基本型別時:判斷的是值

                int i1 = 10;                        
                int i2 = 10;                        
                int i3 = 12;                        
                System.out.println(i1==i2);//true   
                System.out.println(i1==i3); //false 

==比較物件時,比較的是物件的地址值

                 Tiger t1 = new Tiger();
                 Tiger t2 = new Tiger();
                 Tiger t3 = t1;
                 System.out.println(t1.equals(t2));//false 
                 System.out.println(t1 == t2);//false
                 System.out.println(t1.equals(t3));//true
                 System.out.println(t1 == t3);//true

equals(Object obj)

  1. 如果要比較兩個物件間的地址值,就可以使用預設的Object提供的方式。但是,如果想要比較物件間的屬性值,就需要重寫equals()
  2. 基礎型別是按值比較 ,預設使用Object提供的==比較
    比較八大基本型別時:判斷的是值
  3. 物件為引用型別,引用型別按記憶體地址比較 ==比較物件時,比較的是物件的地址值
  4. 物件為引用型別,引用型別按記憶體地址比較 ==比較物件時,比較的是物件的地址值

初步認識equals與==的區別

JVM中的記憶體分配:

在JVM中,記憶體分為堆記憶體跟棧記憶體。他們二者的區別是: 當我們建立一個物件(new Object)時,就會呼叫物件的建構函式來開闢空間,將物件資料儲存到堆記憶體中,與此同時在棧記憶體中生成對應的引用,當我們在後續程式碼中呼叫的時候用的都是棧記憶體中的引用。還需注意的一點,基本資料型別是儲存在棧記憶體中。

1)對於==,比較的是值是否相等

  1. 如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;

  2. 如果作用於引用型別的變數,則比較的是所指向的物件的地址

2)對於equals方法,

注意equals方法不能作用於基本資料型別的變數,equals繼承Object類,比較的是是否是同一個物件

  1. 如果沒有對equals方法進行重寫,則比較的是引用型別的變數所指向的物件的地址;
  2. 諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的物件的內容。

在這裡插入圖片描述

相關文章