[Java]==和equals()的区别(按照数据类型区分)
背景知識(shí)
【引用類型】
復(fù)合數(shù)據(jù)類型是引用類型
**1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。**byte,short,char,int,long,float,double,boolean
他們之間的比較,應(yīng)用雙等號(hào)(==),比較的是他們的值。
基本數(shù)據(jù)類型比較, == 和 Equals 兩者都是比較值
注意注釋 創(chuàng)建的方法不同 導(dǎo)致地址不同
2.復(fù)合數(shù)據(jù)類型(類) /引用類
當(dāng)他們用(==)進(jìn)行比較的時(shí)候,比較的是他們?cè)趦?nèi)存中的存放地址,所以,除非是同一個(gè)new出來(lái)的對(duì)象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。
JAVA當(dāng)中所有的類都是繼承于Object這個(gè)基類的,在Object中的基類中定義了一個(gè)equals的方法,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地址, 對(duì)于復(fù)合數(shù)據(jù)類型之間進(jìn)行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基于他們?cè)趦?nèi)存中的存放位置的地址值的
因?yàn)镺bject的equals方法也是用雙等號(hào)(==)進(jìn)行比較的,所以equals的結(jié)果跟雙等號(hào) 的結(jié)果相同
但在一些類庫(kù)當(dāng)中這個(gè)方法被覆蓋掉了,如String,Integer,Date,在這些類當(dāng)中equals有其自身的實(shí)現(xiàn),而不再是比較類在堆內(nèi)存中的存放地址了。
eclipse還是很智能的,它首先是判斷兩個(gè)對(duì)象的地址是否相等,若不相等再進(jìn)行下面的成員變量判斷。
但這個(gè)方法體是完全可以由我們自己實(shí)現(xiàn)的,即便是我們直接 return true 都是可以的,只要能滿足我們的業(yè)務(wù)需求,怎樣寫都是無(wú)所謂的,因此,equals比較的并不一定是對(duì)象的內(nèi)容,它還可以由其他的信息來(lái)指導(dǎo)比較。
【練習(xí)題】
true,false
其實(shí)是因?yàn)?Integer 在常量池中的存儲(chǔ)范圍為[-128,127],127在這范圍內(nèi),因此是直接存儲(chǔ)于常量池的,而128不在這范圍內(nèi),所以會(huì)在堆內(nèi)存中創(chuàng)建一個(gè)新的對(duì)象來(lái)保存這個(gè)值,所以m,n分別指向了兩個(gè)不同的對(duì)象地址,故而導(dǎo)致了不相等。
總結(jié)
以上是生活随笔為你收集整理的[Java]==和equals()的区别(按照数据类型区分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伯纳德•罗森伯格先生参加华为技术2016
- 下一篇: JavaSE_04异常处理