Java面试通关秘籍:Object类方法重写的那些坑与技巧
馃毃鐏甸瓊鎷烽棶锛氶潰璇曞畼涓哄暐鎬绘彧鐫€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>鈥嬶細
- 娌℃牎楠屽璞$被鍨嬬洿鎺ュ己杞紝閬囧埌瀛愮被瀵硅薄鐩存帴ClassCastException
- 閲嶅啓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瑙勮寖锛岃繕鏄搱甯岀畻娉曠殑浼樺寲瀹炶返锛? 淇濆噯璁╅潰璇曞畼鐪煎墠涓€浜紒