java中怎么理解equals不相等,hashcode可能相等 java 中 equals() 相等的两个对象,hashco...

java\u91ccequals\u548chashCode\u4e4b\u95f4\u4ec0\u4e48\u5173\u7cfb

equals\u4e0ehashcode\u7684\u5173\u7cfb\u662f\uff1a\u4e24\u4e2a\u5bf9\u8c61\u5728equals\u76f8\u7b49\u7684\u60c5\u51b5\u4e0b\uff0chashcode\u6709\u53ef\u80fd\u76f8\u7b49\u4e5f\u6709\u53ef\u80fd\u4e0d\u76f8\u7b49\uff0c\u800c\u4e24\u4e2a\u5bf9\u8c61\u5728hashcode\u4e0d\u76f8\u7b49\u7684\u60c5\u51b5\u4e0b\uff0cequals\u4e5f\u5fc5\u5b9a\u4e0d\u76f8\u7b49\u3002\u7406\u89e3equals\u7684\u5e94\u7528\uff1a\u5b83\u662f\u7528\u4e8e\u7528\u6237\u5728\u8fdb\u884c\u5bf9\u6bd4\u7684\u65f6\u5019\uff0c\u8fd9\u4e2a\u65f6\u5019\u5bf9\u6bd4\u7684\u662f\u5185\u5bb9\u662f\u5426\u76f8\u7b49\u7406\u89e3hashcode\u7684\u5e94\u7528\uff1a\u4f8b\u5982set\u96c6\u5408\uff0c\u5b83\u7684\u4e0d\u53ef\u91cd\u590d\uff0c\u8fdb\u884c\u5bf9\u6bd4\u7684\u4fbf\u662fhashcode\u662f\u5426\u76f8\u7b49\uff0c\u56e0\u6b64set\u96c6\u5408\u5b9e\u73b0\u4e86\u4e0d\u53ef\u91cd\u590d\u3002
\u5982\u679c\u6839\u636e equals(Object) \u65b9\u6cd5\uff0c\u4e24\u4e2a\u5bf9\u8c61\u662f\u76f8\u7b49\u7684\uff0c\u90a3\u4e48\u5bf9\u8fd9\u4e24\u4e2a\u5bf9\u8c61\u4e2d\u7684\u6bcf\u4e2a\u5bf9\u8c61\u8c03\u7528 hashCode \u65b9\u6cd5\u90fd\u5fc5\u987b\u751f\u6210\u76f8\u540c\u7684\u6574\u6570\u7ed3\u679c\u3002
\u5373\u4f7f\u4e24\u4e2ahashCode()\u8fd4\u56de\u7684\u7ed3\u679c\u76f8\u7b49\uff0c\u4e24\u4e2a\u5bf9\u8c61\u7684equals\u65b9\u6cd5\u4e5f\u4e0d\u4e00\u5b9a\u76f8\u7b49\u3002

\u6269\u5c55\u8d44\u6599\uff1a
equals\uff1a
\u7535\u8111\u7f16\u7a0b\u8bed\u8a00\uff0c\u88ab\u7528\u6765\u68c0\u6d4b\u4e24\u4e2a\u5bf9\u8c61\u662f\u5426\u76f8\u7b49\uff0c\u5373\u4e24\u4e2a\u5bf9\u8c61\u7684\u5185\u5bb9\u662f\u5426\u76f8\u7b49\u3002
equals \u65b9\u6cd5\uff08\u662fString\u7c7b\u4ece\u5b83\u7684\u8d85\u7c7bObject\u4e2d\u7ee7\u627f\u7684\uff09
==\u7528\u4e8e\u6bd4\u8f83\u5f15\u7528\u548c\u6bd4\u8f83\u57fa\u672c\u6570\u636e\u7c7b\u578b\u65f6\u5177\u6709\u4e0d\u540c\u7684\u529f\u80fd\uff1a
\u6bd4\u8f83\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff0c\u5982\u679c\u4e24\u4e2a\u503c\u76f8\u540c\uff0c\u5219\u7ed3\u679c\u4e3atrue
\u800c\u5728\u6bd4\u8f83\u5f15\u7528\u65f6\uff0c\u5982\u679c\u5f15\u7528\u6307\u5411\u5185\u5b58\u4e2d\u7684\u540c\u4e00\u5bf9\u8c61\uff0c\u7ed3\u679c\u4e3atrue
hashCode\uff1a
\u662fjdk\u6839\u636e\u5bf9\u8c61\u7684\u5730\u5740\u6216\u8005\u5b57\u7b26\u4e32\u6216\u8005\u6570\u5b57\u7b97\u51fa\u6765\u7684int\u7c7b\u578b\u7684\u6570\u503c\u3002
\u652f\u6301\u6b64\u65b9\u6cd5\u662f\u4e3a\u4e86\u63d0\u9ad8\u54c8\u5e0c\u8868\uff08\u4f8b\u5982 java.util.Hashtable \u63d0\u4f9b\u7684\u54c8\u5e0c\u8868\uff09\u7684\u6027\u80fd\u3002
HashMap\u5bf9\u8c61\u662f\u6839\u636e\u5176Key\u7684hashCode\u6765\u83b7\u53d6\u5bf9\u5e94\u7684Value\u3002
\u5728\u91cd\u5199\u7236\u7c7b\u7684equals\u65b9\u6cd5\u65f6\uff0c\u4e5f\u91cd\u5199hashcode\u65b9\u6cd5\uff0c\u4f7f\u76f8\u7b49\u7684\u4e24\u4e2a\u5bf9\u8c61\u83b7\u53d6\u7684HashCode\u4e5f\u76f8\u7b49\u3002
\u8fd9\u6837\u5f53\u6b64\u5bf9\u8c61\u505aMap\u7c7b\u4e2d\u7684Key\u65f6\uff0c\u4e24\u4e2aequals\u4e3atrue\u7684\u5bf9\u8c61\u5176\u83b7\u53d6\u7684value\u90fd\u662f\u540c\u4e00\u4e2a\uff0c\u6bd4\u8f83\u7b26\u5408\u5b9e\u9645\u3002
\u53c2\u8003\u8d44\u6599\uff1a
\u767e\u5ea6\u767e\u79d1 ------ hashcode
\u767e\u5ea6\u767e\u79d1 ------ equals

\u5728java\u4e2d\uff0cequals\u548chashcode\u662f\u6709\u8bbe\u8ba1\u8981\u6c42\u7684\uff0cequals\u76f8\u7b49\uff0c\u5219hashcode\u4e00\u5b9a\u76f8\u7b49\uff0c\u53cd\u4e4b\u5219\u4e0d\u7136\u3002
\u4e3a\u4f55\u4f1a\u6709\u8fd9\u6837\u7684\u8981\u6c42\uff1f
\u5728\u96c6\u5408\u4e2d\uff0c\u6bd4\u5982HashSet\u4e2d\uff0c\u8981\u6c42\u653e\u5165\u7684\u5bf9\u8c61\u4e0d\u80fd\u91cd\u590d\uff0c\u600e\u4e48\u5224\u5b9a\u5462\uff1f
\u9996\u5148\u4f1a\u8c03\u7528hashcode\uff0c\u5982\u679chashcode\u76f8\u7b49\uff0c\u5219\u7ee7\u7eed\u8c03\u7528equals\uff0c\u4e5f\u76f8\u7b49\uff0c\u5219\u8ba4\u4e3a\u91cd\u590d\u3002
\u5982\u679c\u91cd\u5199equals\u540e\uff0c\u5982\u679c\u4e0d\u91cd\u5199hashcode\uff0c\u5219hashcode\u5c31\u662f\u7ee7\u627f\u81eaObject\u7684\uff0c\u8fd4\u56de\u5185\u5b58\u7f16\u7801\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u51fa\u73b0equals\u76f8\u7b49\uff0c\u800chashcode\u4e0d\u7b49\uff0c\u4f60\u7684\u5bf9\u8c61\u4f7f\u7528\u96c6\u5408\u65f6\uff0c\u5c31\u4f1a\u7b49\u4e0d\u5230\u6b63\u786e\u7684\u7ed3\u679c
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }

举个例子,比如有个哈希函数是将输入字符串的ascii码相加作为其hashcode,这样的话比如我们给两个字符串ac和bb,那他们的hashcode就是相等的,但是明显用equals比较的话是不等的。实际中所用的哈希函数虽然不是这么简单,但同样不可避免会出现这种两个不同的字符串其hashcod相等的情况

  • java涓鐨勯偅涓equal鏄粈涔堟剰鎬 鍟??
    绛旓細姣旇緝寮曠敤鏁版嵁绫诲瀷鐨 姣斿浣犵敤浜哠tring s 鍜 'abc'姣旇緝 鐢==鏄湴鍧 equal鏄 鈥==鈥濇瘮杈冧袱涓彉閲忔湰韬殑鍊硷紝鍗充袱涓璞″湪鍐呭瓨涓殑棣栧湴鍧銆傗equals()鈥濇瘮杈冨瓧绗︿覆涓墍鍖呭惈鐨勫唴瀹规槸鍚︾浉鍚屻傚 灏 鏄唴瀹
  • java閲 equals鍜== 鍖哄埆
    绛旓細==鏄竴涓瘮杈冭繍绠楃锛屽熀鏈暟鎹被鍨嬫瘮杈冪殑鏄硷紝寮曠敤鏁版嵁绫诲瀷姣旇緝鐨勬槸鍦板潃鍊笺傦紙姣旇緝鍦板潃鍊煎嵆鏄寚鏄惁涓哄悓涓涓璞$殑寮曠敤锛equals()鏄竴涓柟娉曪紝鍙兘姣旇緝寮曠敤鏁版嵁绫诲瀷銆傞噸鍐欏墠姣旇緝鐨勬槸鍦板潃鍊硷紝閲嶅啓鍚庢瘮涓鑸槸姣旇緝瀵硅薄鐨勫睘鎬с
  • JAVA涓璭quals鐨勫畾涔,鐢ㄦ硶,鏂规硶閲嶅啓鏄鎬庝箞鍥炰簨
    绛旓細濡傛灉鎴鐞嗚В娌¢敊鐨勮瘽浣犺鐨勫簲璇ユ槸鏈鍒濆嚭鐜板湪Object绫閲岀殑equals鏂规硶鍚с傚湪杩欓噷鎴戣涓涓嬫垜瀵硅繖涓柟娉曠殑鐞嗚В锛屼粎渚涘弬鑰冦傝繖涓嚱鏁扮殑鐢ㄦ硶鏄細姣旇緝[璋冪敤杩欎釜鏂规硶鐨勫璞鍜孾鏂规硶浼犻掕繘鍘荤殑鍙傛暟瀵硅薄]鏄惁鐩哥瓑銆傞噸鍐欒繖涓柟娉曪紝鎰忔濇槸璁╀綘瀹氫箟涓や釜瀵硅薄濡備綍鎵嶇畻鏄浉绛夈傝繖鏍风粰浜嗕綘鏋佸ぇ鐨勭伒娲绘с傚洜涓烘瘮杈冧袱涓璞...
  • Java涓璭quals鍜==鐨勫尯鍒
    绛旓細1銆java涓璭quals鍜==鐨勫尯鍒 鍊肩被鍨嬫槸瀛樺偍鍦ㄥ唴瀛樹腑鐨勫爢鏍堬紙绠绉版爤锛夛紝鑰屽紩鐢ㄧ被鍨嬬殑鍙橀噺鍦ㄦ爤涓粎浠呮槸瀛樺偍寮曠敤绫诲瀷鍙橀噺鐨勫湴鍧锛岃屽叾鏈韩鍒欏瓨鍌ㄥ湪鍫嗕腑銆2銆==鎿嶄綔姣旇緝鐨勬槸涓や釜鍙橀噺鐨勫兼槸鍚︾浉绛夛紝瀵逛簬寮曠敤鍨嬪彉閲忚〃绀虹殑鏄袱涓彉閲忓湪鍫嗕腑瀛樺偍鐨勫湴鍧鏄惁鐩稿悓锛屽嵆鏍堜腑鐨勫唴瀹规槸鍚︾浉鍚屻3銆乪quals鎿嶄綔琛ㄧず鐨勪袱涓...
  • java涓鍙互鐢==鏉ユ瘮杈冧袱涓瓧绗︿覆鏄惁鐩哥瓑鍚
    绛旓細JAVA姣旇緝涓や釜瀛楃涓叉槸鍚︾浉绛夊彲浠ョ敤equals鏂规硶鎴栬呮槸鈥==鈥濄俥quals 鏂规硶甯稿父鐢ㄦ潵妫娴嬩袱涓璞℃槸鍚︾浉绛夛紝鍗充袱涓璞$殑鍐呭鏄惁鐩哥瓑锛屽鏋滃彧鏄瘮杈冨璞$殑鍐呭锛岃屼笉姣旇緝瀵硅薄鏉ユ簮鍜屽姛鑳界被鍨嬫椂锛屽父鐢ㄦ鏂规硶銆傗==鈥濆父鐢ㄤ簬鐢ㄤ簬姣旇緝寮曠敤鍜屾瘮杈冨熀鏈暟鎹被鍨嬫椂鏄惁鍏锋湁涓嶅悓鐨勫姛鑳斤紝姣旇緝鍩烘湰鏁版嵁绫诲瀷锛屽鏋滀袱涓肩浉鍚岋紝...
  • java ==鍜equals鐨勫尯鍒
    绛旓細鍒欒繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse.equals涓よ竟瀵硅薄鍙兘灞炰簬寮曠敤鏁版嵁绫诲瀷锛屽洜涓篹quals鏄柟娉曪紝鎵浠ュ畠鏄濡備綍鍏蜂綋鍒ゆ柇瀵硅薄鏄惁鐩哥瓑鏄牴鎹▼搴忚屽畾鐨勶紝equals鏄睘浜 object绫伙紝榛樿鏄垽鏂唴瀛樺湴鍧鏄惁鐩稿悓锛屼絾鍦╫bject鐨勫瓙绫讳腑鍙互閲嶅啓equals鏂规硶锛屽鍦⊿tring绫讳腑鍙槸姣旇緝瀵硅薄鍐呭鏄惁涓鑷达紝涓鑷 鍒欒繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse銆
  • java 涓瀛楃涓茬殑姣旇緝 == 鍜equals鐨勫尯鍒
    绛旓細Java涓瀛楃涓叉瘮杈冩椂==鍜equals鐨勫尯鍒 (2011-05-17 19:33:07)杞浇鈻 鏍囩锛歫ava 瀛楃涓 equals it 鍒嗙被锛 JavaSE ==鏄瘮杈冧袱涓瓧绗︿覆寮曠敤鐨勫湴鍧鏄惁鐩稿悓锛屽嵆鏄惁鎸囧悜鍚屼竴涓璞★紝鑰宔quals鏂规硶鍒欐瘮杈冨瓧绗︿覆鐨勫唴瀹规槸鍚︾浉鍚屻備緥濡係tring a = "abc";String b = "abc";a == b杩斿洖true锛宎.equals...
  • java涓璭quals鍜宔qual鐨勫尯鍒
    绛旓細equals()鏄痮bject鐨勬柟娉,鎵浠ュ彧鏄傚悎瀵硅薄,涓嶉傚悎浜庡熀鏈被鍨,equals()榛樿鏄敤"=="姣旇緝涓や釜瀵硅薄鐨勫唴瀛樺湴鍧,濡傛灉鎯宠姣旇緝涓や釜瀵硅薄鐨勫唴瀹,瑕侀噸鍐檈quals()鏂规硶鎵嶅彲銆俥qual:鏄敤鏉ユ瘮杈冧袱涓璞″唴閮ㄧ殑鍐呭鏄惁鐩哥瓑鐨勶紝鐢变簬鎵鏈夌殑绫婚兘鏄户鎵 鑷java.lang.Object绫荤殑锛屾墍浠ュ鏋滄病鏈夊璇ユ柟娉曡繘琛岃鐩栫殑璇濓紝璋冪敤...
  • 鍦java涓== 鍜 equals鐨勫尯鍒
    绛旓細瑙i噴涓涓==鍙凤紝浠栨瘮杈冪殑鏄竴涓璞″湪鍐呭瓨涓殑鍦板潃鍊硷紝姣斿2涓瓧绗︿覆瀵硅薄 String s1 = new String("str");String s2 = new String("str");濡傛灉鐢==鍙锋瘮杈冿紝浼氳繑鍥瀎alse锛屽洜涓哄垱寤轰簡涓や釜瀵硅薄锛屼粬浠湪鍐呭瓨涓湴鍧鐨勪綅缃槸涓嶄竴鏍风殑銆equals鐨勬儏鍐垫瘮杈冨鏉傦紝瀹冩槸java.lang.Object绫讳腑鐨勪竴涓柟娉曘
  • Java String equals鍜==鐨勮缁嗕粙缁
    绛旓細equals 鏄瘮杈冪殑涓や釜瀛楃涓叉槸鍚︿竴鏍 姣斿 鈥渁sd鈥.equals锛堚渁sd鈥濓級==true;"==" 瀹冩瘮杈冪殑鏄袱涓滃紩鐢ㄢ濇瘮濡傦細String a=new String ("a");String b=new String ("a");System.out.println(a==b)瀹冨氨杈撳嚭false浜 鍥犱负涓嶆槸涓涓紩鐢ㄥ晩(铏界劧閮芥槸a);...
  • 扩展阅读:苹果手机javascript ... java怎么使用equals ... 浏览器禁止javascript ... java中 和equals的区别 ... equal ... java中正确重写equals方法 ... equals用法例子java ... javascript下载安装 ... java安装教程及打开 ...

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