1. 程式人生 > 實用技巧 >== 與 equals的區別

== 與 equals的區別

==:

  它的作用是判斷兩個物件的地址是不是相等。即,判斷兩個物件是不是同一個物件。(基本資料型別==比較的是值,引用資料型別==比較的是記憶體地址)

equals():

  它的作用也是判斷兩個物件是否相等。但它一般有兩種使用情況:

    ●情況1: 類沒有覆蓋equals() 方法。則通過equals( 比較該類的兩個物件時,等價於通過"==”比較這兩個物件。

    ●情況2: 類覆蓋了equals() 方法。一般,我們都覆蓋equals() 方法來兩個物件的內容相等;若它們的內容相等,則返回true (即,認為這兩個物件相等)。

例:

public class Test {
    public static void main(String[] args) {
        String a = new String("ab"); // a為一個引用
        String b = new String("ab"); // b為另一個引用,物件的內容一樣
        String aa = "ab"; //放在常量池中
        String bb = "ab"; //從常量池中查詢
        if (aa == bb) // true   同一地址
            System.out.println("aa==bb");
        if (a == b) // false, 非同一物件
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }

    }
}

執行結果:

  

結果說明:

  ● String中的equals 方法是被重寫過的,因為object 的equals 方法是比較的物件的記憶體地址,而String 的equals 方法比較的是物件的值。

  ●當建立String 型別的物件時,虛擬機器會在常量池中查詢有沒有已經存在的值和要建立的值相同的物件,如果有就把它賦給當前引用。如果沒有就在常量池中重新建立一個 String 物件。

注意:如果要比較兩個物件的值是否相等,必須重寫equals方法