疑問:equals 和==是用來幹什麼的?
1:比較8種基本資料型別的引用位址,是否一樣
2:比較引用物件的內容,即堆的記憶體位址,是否一樣
疑問:兩者區別?
public
boolean
equals(object o)
如果不重寫equals 兩者是沒有區別的。
分析下string中兩者的區別
string a =
"abc";
string b =
"abc";
string c = a;
string d =
newstring("abc");
printerutil.
log("a == b ="
+ (a==b));
printerutil.
log("a equals b ="
+ (a.
equals(b)));
printerutil.
log("b == c ="
+ (b==c));
printerutil.
log("b equals c ="
+ (b.
equals(c)));
printerutil.
log("d == c ="
+ (d==c));
printerutil.
log("d equals c ="
+ (d.
equals(c)));
輸出結果
a == b =true
a equals b =true
b == c =true
b equals c =true
d == c =false
d equals c =true
「abc」是一塊記憶體位址,new string(「abc」)又重新分配來一塊記憶體位址,故d==c 等於false,equals 之所以等於true,看下原始碼
public boolean equals(object anobject)
if (anobject instanceof string)
return
true;}}
return
false;
}
Java中equals 和「 」區別
1.對於基礎資料型別,使用 比較值是否相等 2.對於復合資料型別 類 使用equals 和 效果是一樣的,兩者比較的都是物件在記憶體中的存放位址 確切的說,是堆記憶體位址 3.對於string integer date等覆蓋了equals 方法的型別,比較的是存放的記憶體位址。而equals 的結果...
Java中「equals「和「 「的區別
1.在基本資料型別中 對於基本型別而言,判斷的是兩個變數的值是否相等 equals 不能用於基本資料型別,如果要比較,就需要使用基本型別對應的包裝類 2.在引用型別中 比較的是變數的值在棧記憶體中存放的物件的堆記憶體位址 即比較引用的記憶體位址 equals 比較的是兩個物件的值是否相同 不是比較記...
java中equals和 的區別
比較的是位址,可以比較物件和屬性 equals只用來比較物件,equals內部是由 實現的,所以比較的也是位址,因為每個物件都繼承了object自帶equals方法,但有些類庫重寫了equals方法。1.首先對於屬性的,因為是八種基本資料型別之一 byte,short,char,int,long,f...