2018年9月12日 星期三

Views

Java使用equal和==的區別



有兩種使用上的差異:

一.字符串的使用有兩種結果

     (1)對於常量String上的宣告,例如:

     String  a1,a2,a3="abc",a4="abc"; 那麼 a1.equals(a2)  // ture,         
     因為兩個變數內容都是abc。其中a3==a4,兩個是字符串生成的變量,所以在Heap區域儲存的值就是真正的內容值。

     (2)但是在
          a1= new String("abc);
          a2 =new String("abc);   那麼a1==a2 // false 因為兩個物件變數參考不同記憶體位置。

二、非字符串使用上應注意

     (1).例如:
         A  a3= new A();
         A  a4= new A();
             在A中沒有重新定義equals這個方法,所以這個方法來自Object類別,
           而Object類別中equals是用來比較"記憶體參考位置"
              所以a3==a4和a3.equals(a4)  //兩個都是false
   
        (2)但是加上
             a3=a4; 表示將a4的記憶位址指派給a3,所以兩物件最後指向同一個記憶體空間。
              此時 a3==a4和a3.equals(a4)  //兩個都是ture        

  Java筆記參考:

沒有留言:

張貼留言