Java面試 - == 和 equals 的區別?


==:如果比較的對象是基本數據類型,則比較的是數值是否一致;如果比較的是引用數據類型,則比較的是對象的地址值是否一致。
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模式,測試一下
==運算符,比較基本數據類型的值.png
由此可知,當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模式,測試一下
==運算符,比較引用數據類型的對象地址.png
由此可知,當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()方法,比較引用數據類型的對象地址.png
由此可知,默認情況下,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()方法,比較對象的屬性內容.png
由此可知,重寫equals()方法,equals()方法是可以比較對象屬性內容是否一致的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM