色欲av一区久久精品_久久综合色综合色88_无码在线观看不卡_色黄视频网站_亚洲国产精品久久久久秋霞66

java中==和equals的區(qū)別是什么?

時(shí)間:2022-07-15

什么是==?

品牌網(wǎng)站建設(shè),== 等于比較運(yùn)算符,如果進(jìn)行比較的兩個(gè)操作數(shù)都是數(shù)值類型,即使他們的數(shù)據(jù)類型不相同,只要他們的值相等,也都將返回true.如果兩個(gè)操作數(shù)都是引用類型,那么只有當(dāng)兩個(gè)引用變量的類型具有父子關(guān)系時(shí)才可以比較,而且這兩個(gè)引用必須指向同一個(gè)對(duì)象,才會(huì)返回true.(在這里我們可以理解成==比較的是兩個(gè)變量的內(nèi)存地址)


什么是equals()?

equals()方法是Object類的方法,在Object類中的equals()方法體內(nèi)實(shí)際上返回的就是使用==進(jìn)行比較的結(jié)果.但是我們知道所有的類都繼承Object,而且Object中的equals()方法沒(méi)有使用final關(guān)鍵字修飾,那么當(dāng)我們使用equal()方法進(jìn)行比較的時(shí)候,我們需要關(guān)注的就是這個(gè)類有沒(méi)有重寫Object中的equals()方法.


區(qū)別

== 是java提供的等于比較運(yùn)算符,用來(lái)比較兩個(gè)變量指向的內(nèi)存地址是否相同.而equals()是Object提供的一個(gè)方法.Object中equals()方法的默認(rèn)實(shí)現(xiàn)就是返回兩個(gè)對(duì)象==的比較結(jié)果.但是equals()可以被重寫,所以我們?cè)诰唧w使用的時(shí)候需要關(guān)注equals()方法有沒(méi)有被重寫.


int 和 Integer

image.png

結(jié)果:

image.png


重點(diǎn):

System.out.println(a == d); 同樣的表達(dá)式,不同的值為什么結(jié)果不同

System.out.println(a == c); 與 System.out.println(a == d); 同樣的對(duì)象類型,為什么復(fù)制方式不一樣,比較結(jié)果不一樣

System.out.println(a == c); 與 System.out.println(a.equals?); 不同的比較方式,結(jié)果為什么不同


解析思路:

首先我們看a,c,d三個(gè)變量的賦值方式,其中a和d的賦值方式都是直接賦值,沒(méi)有調(diào)用new關(guān)鍵字,只有d的賦值方式調(diào)用了new關(guān)鍵字.然后我們?cè)诳促x值的具體數(shù)值,一組是5在-128 ~ +127 之間,另一組是128在/-128 ~ +127 之外.我們可以通過(guò)已知的不同點(diǎn)去閱讀源碼.(其中不同的比較方式為什么結(jié)果不同,這個(gè)可以猜出一定是Integer重寫了equals()方法.)


結(jié)論:

賦值方式中如果調(diào)用了new關(guān)鍵字,一定會(huì)在內(nèi)存中給你分配一個(gè)新的地址

給Integer類型賦值的時(shí)候,如果沒(méi)有調(diào)用new關(guān)鍵字,并且值在-128與+127之間,包括-128和+127,那么指向的都是同一個(gè)內(nèi)存位置.

Integer類中重寫了equals()方法,使用equals()方法進(jìn)行比較的時(shí)候,實(shí)際上比較的內(nèi)存中最終指向的值的內(nèi)存位置,不是直接比較變量的內(nèi)存位置.

重寫的equals()方法

image.png

Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)

與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
ciya68