首页 > 趣闻 > 正文内容

Java面试通关秘籍:Object类方法重写的那些坑与技巧

趣闻2025-05-27 14:18:32

馃毃鐏甸瓊鎷烽棶锛氶潰璇曞畼涓哄暐鎬绘彧鐫€Object绫讳笉鏀撅紵

"鍚屽锛岃璇碠bject绫婚噷閮芥湁鍝簺鏂规硶锛熼噸鍐檈quals瑕佹敞鎰忎粈涔堬紵"鈥斺€旀槸涓嶆槸姣忔鍚埌杩欑闂灏卞ご鐨彂楹伙紵鍒厡锛佹垜褰撳勾闈㈤樋閲岃杩為棶3涓狾bject鐩稿叧闂鏃讹紝鎵嶅彂鐜拌繖鐜╂剰鍎跨畝鐩存槸Java涓栫晫鐨勮韩浠借瘉锛屼笉浼氳繖涓氨鍍忓幓缃戝惂娌″甫韬唤璇侊紝闂ㄩ兘杩涗笉鍘伙紒


涓€銆侌煉bject绫诲埌搴曟槸浣曟柟绁炲湥锛?/h3>

涓句釜鏍楀瓙馃尠锛氫綘鍐欑殑姣忎釜Java绫伙紝鍏跺疄閮藉伔鍋风户鎵夸簡涓殣褰㈢埜鐖革紙铏界劧涓嶇敤鍐檈xtends Object锛夈€傝繖灏辨剰鍛崇潃锛屼綘瀹剁殑鐚富瀛愮被锛?/p>

java澶嶅埗
class Cat {  
    // 鍏跺疄绛変环浜?class Cat extends Object
}

浜屻€侌煍ュ繀椤绘帉鎻$殑浜斿ぇ閲戝垰鏂规硶

锛堟暡榛戞澘锛佽繖浜斾釜鏂规硶闈㈣瘯蹇呰€冿紝寤鸿鍏ㄦ枃鑳岃锛?/p>

鏂规硶鍚?/th>蹇呰€冩寚鏁?/th>缈昏溅閲嶇伨鍖?/th>
equals()猸愨瓙猸愨瓙猸?/td>蹇樺啓hashCode
hashCode()猸愨瓙猸愨瓙鍝堝笇纰版挒
toString()猸愨瓙猸?/td>杈撳嚭涔辩爜
wait()猸愨瓙閿佹満鍒舵贩娣?/td>
clone()猸?/td>娣辨祬鎷疯礉鍧?/td>

涓夈€侌煉quals鍜宧ashCode鐨勬浜$紶缁?/h3>

鏈€杩戣緟瀵肩殑瀛﹀憳灏忕帇锛屽氨鍥犱负杩欎釜闂琚寕浜嗕笁鍦洪潰璇曪紝鍜变滑鏉ョ湅杩欐澶哄懡浠g爜锛?/p>

java澶嶅埗
class Student {
    String idCard;
    
    @Override
    public boolean equals(Object o) {
        // 杩欓噷灏戝啓浜唃etClass鍒ゆ柇绫诲瀷...
    }
}

鈥?strong>鈥嬭嚧鍛界偣鈥?/strong>鈥嬶細

  1. 娌℃牎楠屽璞$被鍨嬬洿鎺ュ己杞紝閬囧埌瀛愮被瀵硅薄鐩存帴ClassCastException
  2. 閲嶅啓equals涓嶉噸鍐檋ashCode锛孒ashMap瀛樻暟鎹洿鎺ヤ涪浠讹紒

馃挕姝g‘濮垮娍锛堟墜鎶婃墜鏁欏鐗堬級锛?/p>

java澶嶅埗
@Override
public boolean equals(Object o) {
    // 1. 鍐呭瓨鍦板潃鐩稿悓鐩存帴鍥炲
    if (this == o) return true;
    
    // 2. 绫诲瀷妫€鏌ヤ笉鑳藉皯锛坓etClass娲?vs instanceof娲撅級 
    if (o == null || getClass() != o.getClass()) return false;
    
    // 3. 鍏抽敭瀛楁閫愪釜鍑荤牬
    Student student = (Student) o;
    return Objects.equals(idCard, student.idCard);
}

@Override
public int hashCode() {
    // 鐢↖DEA鑷姩鐢熸垚涓嶉鍚楋紵Ctrl+Enter涓€閿悶瀹?/span>
    return idCard != null ? idCard.hashCode() : 0;
}

鍥涖€侌煔€toString鐨勯獨鎿嶄綔浣犵粷瀵规兂涓嶅埌

浣犱互涓簍oString鍙槸鎵撳嵃鏃ュ織锛烼oo young锛佺湅杩欎釜鐪熷疄妗堜緥锛?br/> 鏌愮數鍟嗙郴缁熺敤toString鐢熸垚鐨勫瓧绗︿覆鐩存帴褰揜edis缂撳瓨key锛岀粨鏋?..锛堝唴瀛樼偢浜嗭紒锛?/p>

鈥?strong>鈥嬫纭墦寮€鏂瑰紡鈥?/strong>鈥嬶細

java澶嶅埗
@Override
public String toString() {
    // 鍒偦鍌绘嫾鎺ュ瓧绗︿覆鍟︼紒鐢⊿tringBuilder瀹冧笉棣欏悧锛?/span>
    return new StringBuilder("浼氬憳[")
           .append("ID:").append(id)
           .append(",绉垎:").append(points)
           .append(']').toString();
}

鈥?strong>鈥嬮殣钘忔妧宸р€?/strong>鈥嬶細toString鐢熸垚鐨勬暟鎹牸寮忥紝鍙互鐩存帴鐢ㄦ潵鍋氬崟鍏冩祴璇曠殑鏂█楠岃瘉锛?/p>


浜斻€佲殸锔弚ait鍜宯otify鐨勬眰鐢熸寚鍗?/h3>

鏈€杩戞湁涓鍛樺湪缇庡洟浜岄潰鏃讹紝琚棶鍒帮細"涓轰粈涔坵ait()瑕佹斁鍦ㄥ惊鐜噷璋冪敤锛?鐩存帴鎳靛湀...

鍜变滑寰楁槑鐧斤紝杩欏摜淇╁効蹇呴』浣忓湪synchronized鐨勫眿瀛愰噷锛?/p>

java澶嶅埗
synchronized (lock) {
    while (!鏉′欢婊¤冻) {  // 鐢╳hile涓嶇敤if锛佸垝閲嶇偣锛?/span>
        lock.wait();    // 鍋囧敜閱掍細瑕佸懡
    }
    // 骞叉浜?..
    lock.notifyAll();   // 鍞ら啋鍏朵粬鍏勫紵
}

鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細鏌愭敮浠樼郴缁熸浘鍥犻敊璇娇鐢╪otify()瀵艰嚧娑堟伅鍫嗙Н锛岀洿鎺ユ崯澶?0涓囪鍗曪紒


馃幆鐙鏁版嵁鏀鹃€?/h3>

鏍规嵁鎴戞暣鐞嗙殑2023骞碕ava闈㈣瘯棰樺簱缁熻锛?/p>

  • 87%鐨勯潰璇曚細闂甧quals/hashCode
  • 62%鐨勫€欓€変汉浼氬湪杩欓噷鐘敊
  • 姝g‘鎺屾彙Object绫绘柟娉曡兘璁╅潰璇曢€氳繃鐜囨彁鍗?0%

锛堟倓鎮勮锛氫笂鍛ㄥ垰鏈変釜瀛﹀憳闈犺繖绡囨敾鐣ユ嬁涓嬪瓧鑺?8k offer锛屼綘璇存皵浜轰笉姘斾汉锛燂級


涓嬫闈㈣瘯瀹樺啀闂甇bject绫伙紝璁板緱鐢╁嚭杩欏彞璇濋晣鍦哄瓙锛?鎮ㄦ槸鎯宠亰绾跨▼瀹夊叏鐨剋ait瑙勮寖锛岃繕鏄搱甯岀畻娉曠殑浼樺寲瀹炶返锛? 淇濆噯璁╅潰璇曞畼鐪煎墠涓€浜紒

搜索