java中的equals()方法

一、深入理解==与Object类中的equals()方法</


在Java中,==运算符在比较基本数据类型时,比较的是值;而在比较引用数据类型时,比较的是它们的内存地址。这在比较基本数据类型的值时表现明显,如整数或字符。然而,当涉及到引用数据类型,如String,事情就有所不同了。


例如,当我们比较两个String对象s1和s3,以及s3和s4时,尽管它们的值相同,但地址值却不同。这是因为String类重写了Object类中的equals()方法。Object类的equals()底层实现,就如同==,但在String中,它实际上比较的是字符串内容,而非地址。


二、equals()方法的重写与应用</


当谈到自定义类的equals()方法,如User类,如果没有特别重写,那么默认的equals()会与Object的底层实现一致,即比较对象的内存地址。但如果我们希望比较对象的属性值,那么就需要显式地覆盖父类的equals()方法。


在User类中,如main方法所示,即使两个对象属性一致,由于默认的equals()比较地址,所以结果为false。然而,通过重写equals(),我们可以确保比较的是对象的属性值。


三、Objects类的equals()方法及其优势</


为了避免在使用equals()方法时可能的空指针异常,Java 7引入了Objects类,提供了一种更安全的比较方式。例如,推荐使用Objects.equals()而非直接使用Object的equals(),如写法1所示,这样可以清晰地检查对象是否为null,从而避免潜在的异常。


Objects类的equals()方法设计为null-safe,即在处理可能为null的对象时更为谨慎。它的源码揭示了这种优化:在对象不为null时,会调用Object的equals()方法;否则,会进行特殊的处理,避免空指针异常。


总结,Objects.equals()的底层实现策略使得它在处理null值时更加安全,避免了传统equals()可能带来的问题。



  • java涓殑equals()鏂规硶
    绛旓細涓銆佹繁鍏ョ悊瑙==涓嶰bject绫涓殑equals()鏂规硶</ 鍦Java涓锛==杩愮畻绗﹀湪姣旇緝鍩烘湰鏁版嵁绫诲瀷鏃讹紝姣旇緝鐨勬槸鍊硷紱鑰屽湪姣旇緝寮曠敤鏁版嵁绫诲瀷鏃讹紝姣旇緝鐨勬槸瀹冧滑鐨勫唴瀛樺湴鍧銆傝繖鍦ㄦ瘮杈冨熀鏈暟鎹被鍨嬬殑鍊兼椂琛ㄧ幇鏄庢樉锛屽鏁存暟鎴栧瓧绗︺傜劧鑰岋紝褰撴秹鍙婂埌寮曠敤鏁版嵁绫诲瀷锛屽String锛屼簨鎯呭氨鏈夋墍涓嶅悓浜嗐備緥濡傦紝褰撴垜浠瘮杈冧袱涓猄tring瀵硅薄s...
  • JAVA姣旇緝涓や釜瀛楃涓叉槸鍚︾浉绛夌敤浠涔
    绛旓細鍦Java涓锛屽垽鏂袱涓瓧绗︿覆鏄惁鐩哥瓑锛屼綘鍙互浣跨敤equals()鏂规硶鎴栬"=="鎿嶄綔绗︺俥quals()鏂规硶涓昏鐢ㄤ簬姣旇緝瀛楃涓茬殑鍐呭鏄惁涓鑷达紝褰撴鏌ョ殑鍙槸瀛楃涓茬殑瀛楃搴忓垪鏃讹紝杩欐槸棣栭夌殑鎵嬫銆傚畠鐨勪富瑕佷綔鐢ㄦ槸妫鏌ヤ袱涓璞℃槸鍚﹀叿鏈夌浉鍚岀殑鍊硷紝鑰屼笉鍏冲績瀹冧滑鏄惁鏄悓涓涓璞″疄渚嬨傚彟涓鏂归潰锛"=="鎿嶄綔绗﹀垯閫氬父鐢ㄤ簬姣旇緝鍩烘湰...
  • java涓璭quals鍜==鐨勫尯鍒
    绛旓細鍦Java涓锛equals()鏂规硶鍜==杩愮畻绗︾殑涓昏鍖哄埆鍦ㄤ簬锛宔quals()鐢ㄤ簬姣旇緝瀵硅薄鐨勫唴瀹规槸鍚︾浉绛夛紝鑰==杩愮畻绗︾敤浜庢瘮杈冨璞$殑寮曠敤鏄惁鐩哥瓑銆備竴銆乪quals()鏂规硶 equals()鏂规硶鏄疛ava.lang.Object绫荤殑涓閮ㄥ垎锛屽畠鏄敤浜庢瘮杈冨璞$殑鍐呭鏄惁鐩哥瓑鐨勬柟娉曘傚綋鎴戜滑浣跨敤equals()鏂规硶姣旇緝涓や釜瀵硅薄鏃讹紝瀹冩瘮杈冪殑鏄繖涓や釜瀵硅薄鐨勫...
  • equals()鏄粈涔堟剰鎬?
    绛旓細equals()鏄Java涓殑涓涓柟娉曪紝涓鑸槸鐢ㄦ潵姣旇緝涓や釜瀵硅薄鏄惁鐩哥瓑銆傝繖涓柟娉曠殑杩斿洖鍊兼槸涓涓竷灏旂被鍨嬶紝濡傛灉涓や釜瀵硅薄鐩哥瓑锛屽垯杩斿洖true锛屽惁鍒欒繑鍥瀎alse銆傞氬父鎯呭喌涓嬶紝鎴戜滑浣跨敤equals()鏂规硶姣旇緝涓や釜瀵硅薄鏃讹紝闇瑕佹敞鎰忓璞$殑绫诲瀷鍜屽睘鎬ф槸鍚︾浉鍚屻傞渶瑕佹敞鎰忕殑鏄紝鍦↗ava璇█涓紝equals()鏂规硶涓鑸渶瑕佷笌hashCode()鏂规硶閰嶅悎...
  • .equals鏄粈涔堟剰鎬?
    绛旓細.equals()鏄竴涓Java涓殑鏂规硶锛屽彲浠ョ敤鏉ユ瘮杈冧袱涓璞℃槸鍚︾浉绛夈傝繖涓柟娉曟墍鍋氱殑姣旇緝涓嶆槸鍩轰簬瀵硅薄鐨勫紩鐢ㄥ湴鍧锛岃屾槸鍩轰簬瀵硅薄鐨勫兼潵杩涜鐨勩傚綋鎴戜滑浣跨敤.equals鏂规硶杩涜姣旇緝鏃讹紝瀹冧細棣栧厛妫鏌ヤ袱涓璞$殑绫诲瀷鏄惁鐩稿悓銆傚鏋滅被鍨嬬浉鍚岋紝灏辫繘涓姝ユ瘮杈冧袱涓璞$殑鍊兼槸鍚︾浉绛夈傚鏋滀袱涓璞$殑鍊奸兘鐩哥瓑锛.equals鏂规硶浼氳繑鍥...
  • java 涓String鐨別quals()鏂规硶鏄粈涔?
    绛旓細java.lang.String.equals() 鏂规硶姣旇緝瀛楃涓蹭笌鎸囧畾鐨勫璞°傚叾缁撴灉鏄痶rue褰撲笖浠呭綋鍙傛暟涓嶄负null锛屽苟涓旀槸涓涓猄tring瀵硅薄锛岃繖涓璞¤〃绀虹浉鍚岀殑瀛楃搴忓垪 澹版槑 浠ヤ笅鏄0鏄巎ava.lang.String.equals()鏂规硶 public boolean equals(Object anObject)鍙傛暟 anObject -- 杩欐槸杩欎釜String瀵规瘮杈冪殑瀵硅薄 杩斿洖鍊 姝ゆ柟娉曡繑鍥...
  • java涓璭quals浣跨敤鏂规硶
    绛旓細java涓equals浣跨敤鏂规硶锛歟quals 鏂规硶鏄疭tring绫讳粠瀹冪殑瓒呯被Object涓户鎵跨殑, 琚敤鏉ユ娴嬩袱涓璞℃槸鍚︾浉绛夛紝鍗充袱涓璞$殑鍐呭鏄惁鐩哥瓑锛屽尯鍒嗗ぇ灏忓啓銆傚浜庡瓧绗︿覆鍙橀噺鏉ヨ锛屼娇鐢ㄢ==鈥濆拰鈥equals()鈥濇柟娉曟瘮杈冨瓧绗︿覆鏃讹紝鍏舵瘮杈冩柟娉曚笉鍚屻傗==鈥濇瘮杈冧袱涓彉閲忔湰韬殑鍊硷紝鍗充袱涓璞″湪鍐呭瓨涓殑棣栧湴鍧銆傗渆quals()...
  • JAVA涓殑equals()
    绛旓細equals姣旇緝瀛楃涓茬殑鍐呭锛宨d.equals("")鍒ゆ柇瀛楃鏄惁涓虹┖ equals鏄渶椤跺眰鐖剁被Object鍦版柟娉曪紝瀛愮被涓鏋滄病鏈夊鍏惰繘琛 閲嶅啓锛岄偅涔坋quals鐨勫疄闄呭姛鑳芥槸鍜==杩愮畻绗︿竴鏍风殑锛岃孲tring 瀵瑰叾杩涜浜嗛噸鍐欙紝鍔熻兘鏄垽鏂瓧绗︿覆鐨勫唴瀹
  • java equals()鏂规硶
    绛旓細褰搊bj1==obj2涓嶆垚绔嬭宱bj1.equals(obj1)鎴愮珛鐨勬椂鍊欙紝鍙兘璇存槑锛氬璞bj1鎵灞炵被鐨別quals鏂规硶琚噸鍐欎簡銆備緥濡係tring绫荤殑equals琚噸鍐欎负姣旇緝涓や釜瀛楃涓茬殑鍐呭鏄惁鐩稿悓銆
  • java涓==鍜equals鐨勫尯鍒
    绛旓細java涓==鍜宔quals鐨勫尯鍒涓嬶細1銆佹瘮杈冪殑瀵硅薄涓嶅悓锛==鎿嶄綔绗︽瘮杈冪殑鏄袱涓璞$殑寮曠敤鏄惁鐩哥瓑锛屽嵆瀹冧滑鏄惁鎸囧悜鍐呭瓨涓殑鍚屼竴涓璞°equals锛堬級鏂规硶姣旇緝鐨勬槸涓や釜瀵硅薄鐨勫兼槸鍚︾浉绛夈傚畠琚璁℃垚鍦ㄦ瘮杈冧袱涓瓧绗︿覆鏃讹紝鍙互姝g‘鍦板垽鏂畠浠槸鍚︾浉绛夈2銆佷娇鐢ㄧ殑鍦烘櫙涓嶅悓锛==閫氬父鐢ㄤ簬姣旇緝鍩烘湰鏁版嵁绫诲瀷鍜屽紩鐢ㄦ暟鎹...
  • 扩展阅读:javascript innerhtml ... javascript confirm ... javascript void 0 ... java serversocket ... java serializable ... 自学javascript视频 ... java windowbuilder ... java properties ... javascript jquery ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网