首頁 >Java >java教程 >詳解Java中「==」與equals()的區別

詳解Java中「==」與equals()的區別

高洛峰
高洛峰原創
2017-02-03 13:33:401335瀏覽

Java中“==”與equals()的區別

 對於關係運算元“==”,《Java程式設計思想》中是這樣描述的:「關係運算子產生的是一個boolean結果,它們計算的是操作數的值之間的關係」。這裡的操作數的「值」值得我們注意。對於8種基本資料型態(boolean,byte,char,short,int,float,double,long),它們的變數直接儲存的就是「值」。所以,我們用「==」比較基本資料型別的變數時,實際比較的就是變數儲存的值,例如:

public static void main(String[] args) {
    int a = 5, b = 5;
    System.out.println(a == b);
  }

很明顯,程式會輸出:true。但是,下面這段程式碼呢?

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c == d);
  }

我們運行程序,發現輸出的是:false。這是因為Integer並非Java中的基本資料類型,其變數c、d在Java中稱為指向物件的引用,其儲存的「值」是物件在記憶體中的位址,而非值「5」本身。所以,c和d實際儲存的分別是兩個value值都為「5」的Integer物件的位址,這兩個物件不在同一塊記憶體空間,「==」比較的結果自然是false了。 

  那麼equals()方法比較的是什麼呢? equals()是基底類別Object中定義的方法,在Object類別中,equals()方法定義為:

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

這等價於「==」。其實,equals()方法的意義在於重寫,否則對equals()的呼叫是沒有意義的。例如,繼承自Object的Integer類別便重寫了equals()方法:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
      return value == ((Integer)obj).intValue();
    }
    return false;
  }


該方法的意義是對value值進行比較,那麼如果我們對於兩個具有相同value值的Integer物件呼叫equals( )進行比較:

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c.equals(d));
  }


結果是true。

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多詳解Java中「==」與equals()的區別相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn