equals方法作用:
成都創(chuàng)新互聯(lián)專注于尼元陽(yáng)企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。尼元陽(yáng)網(wǎng)站建設(shè)公司,為尼元陽(yáng)等地區(qū)提供建站服務(wù)。全流程按需求定制開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)equals()被用來(lái)檢測(cè)兩個(gè)對(duì)象是否相等,即兩個(gè)對(duì)象的內(nèi)容是否相等。
equals 方法是String類從它的超類Object中繼承的
==用于比較引用和比較基本數(shù)據(jù)類型時(shí)具有不同的功能:
比較基本數(shù)據(jù)類型,如果兩個(gè)值相同,則結(jié)果為true
而在比較引用時(shí),如果引用指向內(nèi)存中的同一對(duì)象,結(jié)果為true
equals()方法在object類中定義:
public boolean equals(Object obj) {
return (this == obj);
}
實(shí)驗(yàn)環(huán)境ASUS VivoBook + Windows10 + IntelliJ IDEA 2021.3.2 (Community Edition) + JDK17
實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)一個(gè)名為Value 的類,其中含有一個(gè)字符類型的成員x 和雙精度類型的成員y。請(qǐng)重寫(override)其equals( )方法,使得用equals( )比較Value 類的兩個(gè)對(duì)象的內(nèi)容時(shí),相等條件是對(duì)象的所有成員分別對(duì)應(yīng)相等。
(1)實(shí)驗(yàn)思路
①定義類Value,設(shè)置其成員變量(包括但不限于)為char型變量x和double型變量y。
②equals方法本是對(duì)引用地址進(jìn)行比較,現(xiàn)需要根據(jù)兩個(gè)類內(nèi)容中的成員變量對(duì)內(nèi)容進(jìn)行比較,對(duì)于Value類對(duì)象而言需要將其與其他Value類對(duì)象進(jìn)行比較。故重寫方法返回值為boolean型,方法名保留為equals,參數(shù)列表為Value類對(duì)象b。借助比較運(yùn)算符“==”和“this”關(guān)鍵字對(duì)兩個(gè)類的成員變量進(jìn)行判定,若滿足則返回true,不滿足則返回false。
③通過(guò)添加有參構(gòu)造器可以對(duì)Value類的成員變量x和y進(jìn)行初始化。
④在類中定義main方法,創(chuàng)建實(shí)例進(jìn)行比較。
(2)實(shí)驗(yàn)源碼
Value類:
public class Value {
char x;
double y;
boolean equals(Value b) {
return (this.x == b.x) && (this.y == b.y);
}
Value(char m,double n){
this.x=m;
this.y=n;
}
public static void main(String[] args) {
Value classOne = new Value('x',2.5);
Value classTwo = new Value('x',2.5);
System.out.println(classOne.equals(classTwo));
}
}
(3)實(shí)驗(yàn)截圖
(4)實(shí)驗(yàn)心得
此題中共有兩個(gè)難點(diǎn)。
第一個(gè)難點(diǎn)在于equals方法的重寫判定。我們需要通過(guò)比較成員變量來(lái)比較類的內(nèi)容,“==”本身不能用來(lái)比較引用對(duì)象的內(nèi)容,但對(duì)于基本類型char和double,“==”卻能夠進(jìn)行內(nèi)容比較。故在equals方法中,我們借助“==”對(duì)基本類型進(jìn)行內(nèi)容比較,進(jìn)而實(shí)現(xiàn)類的實(shí)例比較。
第二個(gè)難點(diǎn)在于實(shí)例創(chuàng)建。如果我們?cè)趧?chuàng)建類時(shí)指定成員變量的值,那就失去了比較的意義。通過(guò)創(chuàng)造構(gòu)造器,使得用戶自行輸入兩個(gè)Value類的實(shí)例的成員變量值,可以更好地幫助我們檢驗(yàn)程序的正確性。
(5)實(shí)驗(yàn)重點(diǎn)
這里涉及了三個(gè)知識(shí)點(diǎn),重寫,判斷實(shí)例的類和向下轉(zhuǎn)型。
重寫即在子類中定義方法名、返回類型和參數(shù)表和父類完全相同的方法,但方法實(shí)現(xiàn)過(guò)程不一樣。這里格外需要注意的是子類中重寫的方法訪問(wèn)權(quán)限只能增大不能減少,Object類中equals方法的訪問(wèn)權(quán)限為public,因此Valuez中重寫的equals方法的訪問(wèn)權(quán)限只能為public。
判斷實(shí)例的類是否是Value,在這個(gè)實(shí)驗(yàn)的程序中使用obj.getClass()==this.getClass() 來(lái)判斷,另外還可以使用obj instanceof Value來(lái)判斷。
只有先經(jīng)過(guò)向上轉(zhuǎn)型的對(duì)象才能繼續(xù)向下轉(zhuǎn)型。如果父類引用的對(duì)象是父類本身,那么在向下轉(zhuǎn)型的過(guò)程中是不安全的,編譯不會(huì)出錯(cuò),但是運(yùn)行時(shí)會(huì)出現(xiàn)java.lang.ClassCastException錯(cuò)誤。
(摘自博主「CN_BIT」,鏈接:https://blog.csdn.net/CN_BIT/article/details/108778669)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧