Java中 equals() 方法和 == 的區別

執力發表於2020-09-29

基本資料型別 中:
如 byte,short,char,int,long,double,boolean

用 == 和 equals() 方法進行比較的時候比較的都是值

複合資料型別 中:
如:String,陣列,一般的類,介面等

用==操作來進行比較時,比較的是它們在記憶體中的地址

java在Object類中定義了 equals() 方法,用來比較物件的地址,但是在一些類如 String,Integer,Date 等類中重寫了 equals() 方法用來比較他們的值

小栗子:

public class Test{
  public static void main(String args[]){
          String str1 = "Test";
          String str2 = "Test";           
          System.out.println(str1==str2);  
      System.out.println(str1.equals(str2));
    }
}

輸出結果:
true
true

做稍許改動我們會發現

public class Test{
      public static void main(String[] args) {
        String str1 = "Test";
        String str2 = new String("Test");         
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));
    }
}

輸出結果:
false
true

這是為什麼呢?
為大家介紹java中的字串緩衝池:

     程式在執行時會建立一個字串緩衝池,在第一個程式的字串建立方式中,str1和str2都等於"Test",程式會首先在這個字串緩衝池中尋找有相同值的物件,str1那條語句先被執行,str2在後來建立的時候,會直接指向str1的地址,所以str1== str2這個表示式才會返回true;
     但在第二種建立方式中,因為使用了new關鍵字,所以會在空間中為str2分配一個新的地址,所以在str1==str2就會返回false。

相關文章