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

Object類的equals 和 ==的區別

先判斷以下程式碼的true和false

public static void main(String[] args) {
        int num = 1;
        int num1 = 1;
        System.out.println(num==num1);
        System.out.println("---------");
        Integer num2 = new Integer("1");
        Integer num3 = new Integer("1");
        System.out.println(num2==num3);
        System.
out.println(num2.equals(num3)); System.out.println("---------"); String s = "hello"; String s1 = "hello"; System.out.println(s==s1); System.out.println(s.equals(s1)); }

執行結果為:

true
---------
false
true
---------
true
true

為什麼出現這個結果

 * == :運算子
 * 1. 可以使用在基本資料型別變數和引用資料型別變數中
 
* 2. 如果比較的是基本資料型別變數:比較兩個變數儲存的資料是否相等。(不一定型別要相同) * 如果比較的是引用資料型別變數:比較兩個物件的地址值是否相同.即兩個引用是否指向同一個物件實體 * 補充: == 符號使用時,必須保證符號左右兩邊的變數型別一致。 * * 二、equals()方法的使用: * 1. 是一個方法,而非運算子 * 2. 只能適用於引用資料型別 * 3. Object類中equals()的定義: * public boolean equals(Object obj) { return (this == obj); }
* 說明:Object類中定義的equals()和==的作用是相同的:比較兩個物件的地址值是否相同.即兩個引用是否指向同一個物件實體 * * 4. 像String、Date、File、包裝類等都重寫了Object類中的equals()方法。重寫以後,比較的不是 * 兩個引用的地址是否相同,而是比較兩個物件的"實體內容"是否相同。 * * 5. 通常情況下,我們自定義的類如果使用equals()的話,也通常是比較兩個物件的"實體內容"是否相同。那麼,我們 * 就需要對Object類中的equals()進行重寫. * 重寫的原則:比較兩個物件的實體內容是否相同.