簡單談談 與equals的區別

2021-10-06 10:09:33 字數 1288 閱讀 2859

**展示

string a =

"zhansan"

; string b =

"zhansan"

; string c =

newstring

("zhansan");

system.out.

println

(a == b)

;//true

system.out.

println

(a == c)

;//false

system.out.

println

(a.equals

(c))

;//true

此時a==b 為true是因為ab兩個都是在常量池建立的物件使用,位址值時相等的,a == c為false是因為c是new出來的重新開闢了記憶體空間,與常量池記憶體位址不相等。但是為什麼a.equals(c)是true呢?我們來檢視equals內部到底是什麼

public

boolean

equals

(object obj)

此時我們是否很奇怪,equals的底層依然是使用"=="比較引用位址是否相等,此時你應該有疑問,為什麼ac比較位址值的時候不是不相等嗎?這是怎麼回事?我們繼續去看string這個類

public

boolean

equals

(object anobject)

if(anobject instanceof

string

)return

true;}

}return

false

;}

原來string類重寫了equals方法,把比較兩者的位址值變成了比較兩者的內容值,此時你應該會明白為什麼a.equals(c)相等的原因了。我們自己來寫乙個物件用equals比較是否相等。

public

class

person

public string getname()

public

void

setname

(string name)

}

@test

public

void

test()

所以equals去做比較一定得看是否重寫了equals方法。

與equals的區別

注意 當比較兩個基本資料型別的變數是否相等時 基本資料型別包括 byte short int long float double 當它們的值相同時,則 結果就為true eg public class class6 1 public static void main string args stri...

與equals的區別

public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...

與 equals的區別

與equals都是比較兩個變數得到true或false。在進行比較時,先說說記憶體,記憶體分為堆和棧。基本資料型別中,是把值存在棧中,把值傳遞給變數,這種傳遞叫值傳遞。引用資料型別中,是在棧中存位址,堆中存的new的物件,給變數賦值傳遞時,傳的是位址,這種傳遞叫引用傳遞。基本資料型別 int a 1...