==:如果比較的對象是基本數據類型,則比較的是數值是否一致;如果比較的是引用數據類型,則比較的是對象的地址值是否一致。
equals():equals()方法不能用於比較基本數據類型的對象,如果對象和自身進行比較,則equals()方法與==是一樣的。對於String類 Date類 File類等 可重寫equals() 方法用於比較對象的屬性內容是否一致。
舉例
如果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 的值嗎?
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()方法比較的是什么呢?
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()方法,是否可以比較對象的內容呢?
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()方法是可以比較對象屬性內容是否一致的。