引入
==
- 基本數(shù)據(jù)類(lèi)型(也稱(chēng)原始數(shù)據(jù)類(lèi)型)
byte, short, char, int long, float, double, boolean煤蚌, ?== 比較的是他們的值
- 復(fù)合數(shù)據(jù)類(lèi)型(類(lèi)): 當(dāng)他們用(==)進(jìn)行比較的時(shí)候瘸味,比較的是他們?cè)趦?nèi)存中的存放地址(確切的說(shuō)缕粹,是堆存放地址)
注:?
? ? 每次new一次噪生,都會(huì)重新開(kāi)辟堆內(nèi)存空間
equals
- Java當(dāng)中所有的類(lèi)都是繼承于Object這個(gè)超類(lèi)的锨苏,在Object類(lèi)中定義一個(gè)eqauls的方法霍衫,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地址身堡,但在一些類(lèi)庫(kù)當(dāng)中這個(gè)方法被復(fù)寫(xiě)了睹酌,如String权谁,Integer,Data憋沿。在這些類(lèi)中equals有其自身的實(shí)現(xiàn)旺芽,而不再是比較類(lèi)在堆內(nèi)存中的存放地址了
-- 對(duì)于復(fù)合數(shù)據(jù)類(lèi)型之間進(jìn)行equals比較,在沒(méi)有覆寫(xiě)equals方法的情況下辐啄,他們之間的比較還是內(nèi)存中的存放位置的地址值采章,跟雙等號(hào)(==)的結(jié)果相同;如果被復(fù)寫(xiě)则披,按照復(fù)寫(xiě)的要求來(lái)共缕。
小結(jié):?
“==”比較的是值【變量(棧)內(nèi)存中存放的對(duì)象的(堆)內(nèi)存地址】equal用于比較兩個(gè)對(duì)象的值是否相同【不是比地址】【特別注意】Object類(lèi)中的equals方法和“==”是一樣的,沒(méi)有區(qū)別士复,而String類(lèi)图谷,Integer類(lèi)等等一些類(lèi)翩活,是重寫(xiě)了equals方法,才使得equals和“==不同”便贵,所以菠镇,當(dāng)自己創(chuàng)建類(lèi)時(shí),自動(dòng)繼承了Object的equals方法承璃,要想實(shí)現(xiàn)不同的等于比較利耍,必須重寫(xiě)equals方法。"=="比"equal"運(yùn)行速度快,因?yàn)?=="只是比較引用.
鏈接:http://www.reibang.com/p/5ffcf937a5b1