2018年9月12日 星期三
Views
有兩種使用上的差異:
一.字符串的使用有兩種結果
(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筆記參考:
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筆記參考:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言