在java中"=="是用來(lái)比較兩者儲(chǔ)存值的地址是否相同,比如A==B,就是比較A和B所儲(chǔ)存值的地址是否相同。
再來(lái)看看equals()的使用
在java中有這兩種情況存在:
1、使用object類中的equals()方法,這個(gè)是java中最初的equals()方法
如果你自定義一個(gè)類A,并且沒(méi)有去繼承其他的類,這時(shí)A中的equals()
的功能就是比較兩者儲(chǔ)存值的地址是否相同。因?yàn)樗械念惗祭^承object
類,而object類中有equals()這樣的方法
object類中的equals()方法的源代碼如下:
public boolean equals(object obj)
{
return this == obj;
}
從這段代碼中,我們可以再次確定,這種情況下的equals()方法的功能是
比較兩者儲(chǔ)存值的地址。
2、自定義一個(gè)類B,但B類繼承了c類,而c類中的equals()方法已經(jīng)被重寫(xiě)過(guò)
了,這種情形就需要具體情況具體分析了,但大部分被重寫(xiě)的equals()方
法所擁有的功能就是比較兩者儲(chǔ)存值的內(nèi)容是否相同,而不再是比較地址
了。比如:創(chuàng)建一個(gè)String對(duì)象 String str1 = new String("1");
String str2 = new String("1");
這時(shí)str1.equals(str2)比較的就是str1和str2中儲(chǔ)存值的內(nèi)容是否相同
了,因?yàn)镾tring類中的equals()就被重寫(xiě)了,但這并不意味著所有被重寫(xiě)
過(guò)的equals()方法都是用來(lái)比較內(nèi)容的(因?yàn)槟壳拔宜龅降闹挥羞@種情
況,如果大家有興趣可以去多研究研究
總結(jié):"=="就只有一種用法,而equals()有兩種用法,只是所使用的環(huán)境不一樣而已。