==:若是比較的對象是基本數據類型,則比較的是數值是否一致;若是比較的是引用數據類型,則比較的是對象的地址值是否一致。
equals():equals()方法不能用於比較基本數據類型的對象,若是對象和自身進行比較,則equals()方法與==是同樣的。對於String類 Date類 File類等 可重寫equals() 方法用於比較對象的屬性內容是否一致。java
舉例
若是a,b 是基本類型,那麼== 運算符比較的是什麼呢?測試
public class Demo { private static int a = 100; private static int b = 100; public static void main(String[] args) { if(a == b){ System.out.print("由於a,b是基本類型,因此此時比較的是a, b 的值"); } } }
運行Debug模式,測試一下
由此可知,當a,b是基本類型,那麼== 運算符比較的就是基本類型的值。
若是a,b 是引用類型, 那麼== 運算符比較的仍是a,b 的值嗎?this
public class Demo { private static String a = "china"; private static String b = "china"; public static void main(String[] args) { if(a == b){ System.out.print("由於a, b是引用類型, 因此此時比較的是對象a, b的地址值"); } } }
運行Debug模式,測試一下
由此可知,當a,b是引用類型,那麼== 運算符比較的就是引用類型的對象地址值。
若是a,b 是引用類型,那麼equals()方法比較的是什麼呢?3d
public class Demo { private static String a = "china"; private static String b = "china"; public static void main(String[] args) { if(a.equals(b)){ System.out.print("由於a, b是引用類型, 因此此時比較的是對象a, b的地址值"); } } }
運行Debug模式,測試一下
由此可知,默認狀況下,equals()方法比較的是對象與自身是否一致。當對象與自身一致時,equals()方法與== 是同樣的。
若是重寫equals()方法,是否能夠比較對象的內容呢?code
class Pig { private String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } // 重寫equals()方法, 用於比較對象的屬性內容是否一致 public boolean equals(Object anObject) { // 判斷對象與自身是否一致 if (this == anObject) { return true; } // 判斷anObject與String是否爲同類或存在繼承關係 if (anObject instanceof String) { return true; } //判斷是同一類或者子父類關係,則將Object類型強轉爲Pig Pig pig = (Pig)anObject; // 比較pig的屬性name的內容是否一致 if(this.name == pig.name && this.name.equals(pig.name)) { return true; }else { return false; } } }
運行Debug模式,測試一下
由此可知,重寫equals()方法,equals()方法是能夠比較對象屬性內容是否一致的。對象