新手學Java(一)——Equals和“==”的區別

來源:互聯網
上載者:User

標籤:java   equals   equals和區別   

      一句話概括:

    如果操作兩邊都是物件控點,就比較兩個控制代碼是否指向同一個對象。如果兩邊是基本類型,則比較的就是值。

    

    ==不屬於任何類,而equals則是任何類(Java中)的一個方法。

    equals()是每個對象與生俱來的方法,因為所有類的最終基類就是Object(除去Object本身);而equals()是Object的方法之一。


    我們可以這樣比較:

    1)Primitive1(基本類型)== Primitive2(基本類型)

    2)Object1 Reference1(對象引用)== Object1 Reference2(對象引用)

    3)Object1 Reference1(對象引用).equals(Object1 Reference2(對象引用))


    但是卻不能這麼比較:

    Primitive1(基本類型).equals(Primitive2(基本類型))

    

    然後下面看具體的比較

    基礎資料型別 (Elementary Data Type)的值:    

   int a = 4;   int b = 4;   System.out.println(a==b);  //True

    對於基礎資料型別 (Elementary Data Type)的值只能用“==”比較子進行比較。

    

    參考型別的值的比較

   Test t1 = new Test();   Test t2 = new Test();   System.out.println(t1==t2);          //Fasle   System.out.println(t1.equals(t2));   //False

   兩句的結果都是False。

   

   原因:

   

   第一句:用new操作符建立的對象都會在記憶體中分配一個新的記憶體位址,所以兩個對象的記憶體位址不同,為fasle.

   第二句:必須明確equals到底比較的是對象的什麼~~

   看一看Object類的equals方法源碼:  

  public boolean equals(Object obj) {     return (this == obj);     }

   內部使用的也是==比較的,所以equals和==在對象的比較上是一樣。

  

   那equals還有什麼用?


   每個對象都有自己的記憶體,但是每個對象也都有自己的一些屬性。

   比如說,馬和牛都有腿,我們希望通過腿的數量來判斷馬和牛這兩個對象是否相同。

   這個時候,再使用Object類中的equals方法就不能夠滿足需求了。就需要通過覆蓋equals的方式,建立兩個對象比

較相同的具體內容。

   執行個體如下:

  //馬類  class Horse{String Type;int Legs;//相等的標準,腿的數目相等public boolean equals(Object o){if(this.Legs==((Cattle)o).Legs){return true;}return false;}public Horse(String Type,int legs){this.Type=Type;this.Legs=legs;}}//牛類class Cattle{String Type;int Legs;//相等的標準,腿的數目相等public Cattle(String Type,int legs){this.Type=Type;this.Legs=legs;}public boolean equals(Object o){if(this.Legs==((Horse)o).Legs){return true;}return false;}}public class EqualsTest{        public static void main(String[] args){        Cattle c = new Cattle("I am the Cattle",4);Horse h = new Horse("I am the Horse",4);if(c.equals(h)){System.out.println(c.Type);System.out.println(h.Type);System.out.println("Cattle Equals Horse");}}}
     最終的結果:

     "I am the Cattle"
     "I am the Horse"
     "Cattle Equals Horse"

     通過上面這個用equals方法將風馬牛不相等的事物變得相等,我們可以看出,其實對象是否相等,取決於使用者的需

求。我們定義什麼樣的標準,電腦就會踏踏實實的為我們實現。 

     所以,在用Java的類描述對象的時候,如果要判斷該對象是否相同時,通常都會覆蓋equals方法,建立根據該對

象特徵進行比較相同的依據。


  

  

    

新手學Java(一)——Equals和“==”的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.