Java中关于equals()和hashCode()的问题 JAVA关于equals和hashcode的例子,请大神解决...

\u5728java\u4e2d\uff0c\u5173\u4e8eequals(),\u548chashCode()\u7684\u91cd\u5199\u95ee\u9898\u3002

java\u4e2d\u6240\u6709\u7c7b\u90fd\u662fobject\u7684\u5b50\u7c7b\uff0c\u5b50\u7c7b\u62e5\u6709\u7236\u7c7b\u975e\u79c1\u6709\u7684\u53d8\u91cf\u548c\u65b9\u6cd5\u56e0\u6b64\u4e0d\u5149\u53ef\u4ee5\u7528object\u8c03\uff0c\u6240\u6709java\u5bf9\u8c61\u90fd\u53ef\u4ee5\u8c03\u7528equal\u65b9\u6cd5\u3002

HashSet\u5185\u90e8\u662f\u7528HashMap\u5b58\u653e\u6570\u636e\u7684\uff0c\u5176\u4e2d\u5bf9\u8c61\u7684hashCode\u662f\u952e\uff0c\u5bf9\u8c61\u662f\u503c\u3002\u800cSet\u662f\u4e0d\u80fd\u6709\u91cd\u590d\u5143\u7d20\u7684\uff0c\u90a3\u5b83\u662f\u600e\u6837\u5224\u65ad\u4e24\u4e2a\u5143\u7d20\u662f\u4e0d\u662f\u91cd\u590d\uff08\u540c\u4e00\u4e2a\uff09\u5462\uff0c\u5c31\u662f\u8c03\u7528\u6dfb\u52a0\u7684\u5143\u7d20\u7684hashCode\u65b9\u6cd5\u53d6\u5f97hash\u503c\uff0c\u7136\u540e\u5728\u5df2\u6709\u5217\u8868\u91cc\u9762\u627e\uff0c\u5982\u679c\u627e\u5230hash\u76f8\u540c\u7684\u5143\u7d20\uff0c\u518d\u8c03\u7528\u6dfb\u52a0\u7684\u5143\u7d20\u7684equals\u65b9\u6cd5\u548c\u627e\u5230\u7684\u5143\u7d20\u5224\u65ad\u662f\u5426\u76f8\u7b49\u3002
\u5728HashSet\u4e2d\u5c31\u662f\u5217\u8868\u4e2d\u5df2\u6709\u7684\u5143\u7d20\u3002
\u56e0\u4e3aObject\u9ed8\u8ba4hashCode\u65b9\u6cd5\uff0c\u5bf9\u8c61\u4e0d\u540chash\u5c31\u4e0d\u540c\uff0c\u5b57\u7b26\u4e32\u7684hashCode\u65b9\u6cd5\u662f\u57fa\u4e8e\u5185\u5bb9\u7684\uff0c\u53ea\u8981\u5185\u5bb9\u76f8\u540c\uff0chash\u5c31\u76f8\u540c\u7684\uff0cPerson\u7c7b\u91cd\u5199\u7684hashCode\u65b9\u6cd5\u8fd4\u56dereturn this.name.hashCode() * this.age\uff0c\u8fd9\u6837\u53ea\u8981\u540d\u5b57\u548c\u5e74\u9f84\u662f\u4e00\u6837\u7684\uff0c\u5f97\u5230\u7684hash\u503c\u5c31\u662f\u4e00\u6837\u7684\u4e86\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e0d\u91cd\u5199\u7684\u8bdd\uff0c\u4e24\u4e2anew Person("\u738b\u4e94",32)\u7684hash\u662f\u4e0d\u540c\u7684\uff0c\u56e0\u4e3a\u5bf9\u8c61\u4e0d\u540c\uff0c\u4f46\u662f\u91cd\u5199\u540e\u83b7\u53d6\u7684hash\u5c31\u76f8\u540c\u4e86\u3002

其实我觉得哈, 这应该是一种惯例.
就是大家的一种共识, 便于以后的拓展和维护.
这样说吧, 你如果只是测试, 那么你随便怎么写都行, 你只要一个equals方法而不管hashcode, 这样OK, 没问题, 程序一样能跑通.
但是, 如果你写了equals方法, 而你不重写hashcode方法, 那么在使用hashtable或hashset的时候, 就会出现很多不必要的错误.
而且..你在重写这两个方法前, 必须要搞清楚, 它们分别应该遵循什么原则, 这也算惯例吧.
比如equals方法, 以下就拷贝了, 很基础的知识.
* 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
* 反射性:x.equals(x)必须返回是“true”。
* 类推性:如果x.equals(y)返回是“true”,而且 y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
* 还有一致性:如果 x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
* 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
hashCode()的返回值和equals()的关系如下:
* 如果x.equals(y)返回“true”,那么x和y的 hashCode()必须相等。
* 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。

equals比较的是变量中存储的内容 hashcode比较的是在内存中地址只有equals和hashcode返回的都是true 两个变量才可以"=="至于怎么比较内容 重写equals方法就是

比较两个引用是否是同一个地址,也就是说判断他们是不是只向同一个对象

hashCode的用处在于快速判断两个对象是否相等。

a.equals(b)则一定要有a.hashCode() == b.hashCode();

所以如果a.hashCode()!= b.hashCode()则说明 a.equals(b)== false

两者的作用是一样的,没有说一定要一起同时使用,我平时用a.equals(b)来比较两个字符串是否相等。这种常用

如果你只覆盖了equals的话,是会有问题的。因为那就不是重写超类的方法了。在超类中,默认你继承重写的就得是hashCode()跟equals()两个方法,不然就没有效果的。当然,你也可以自己写个equals这样的方法,但其实是不同的。

  • java equals()鏂规硶
    绛旓細褰搊bj1==obj2涓嶆垚绔嬭宱bj1.equals(obj1)鎴愮珛鐨鏃跺欙紝鍙兘璇存槑锛氬璞bj1鎵灞炵被鐨別quals鏂规硶琚噸鍐欎簡銆備緥濡係tring绫荤殑equals琚噸鍐欎负姣旇緝涓や釜瀛楃涓茬殑鍐呭鏄惁鐩稿悓銆
  • 鍏充簬java涓鐨equals()
    绛旓細闄や簡String绫诲瀷锛屽叾浠鐨瀵硅薄绫诲瀷閫氳繃equals()鏂规硶鎵姣旇緝鐨勯兘鏄粬浠殑鍦板潃寮曠敤锛堥櫎闈炶繖涓や釜姣旇緝鐨勫璞″凡缁忚鐩栦簡equals()鏂规硶锛夋棦鐒朵綘宸茬粡鐭ラ亾String 涔嬮棿鏄瘮杈冨唴瀹癸紝閭d箞锛屽彧瑕佷笉鏄疭tring涔嬮棿鐨勬瘮杈冿紝褰撶劧姣旇緝鐨勬槸涓や釜瀵硅薄鐨勫紩鐢ㄥ晩锛佸洜涓烘暟缁勪篃鏄璞★紒
  • 璇烽棶java涓 ==鍜equals 鐨勫尯鍒 ?
    绛旓細"equals"鏄垽鏂袱涓彉閲忔垨瀹炰緥鎵鎸囧悜鐨勫唴瀛樼┖闂寸殑鍊兼槸涓嶆槸鐩稿悓銆2銆佸畾涔変笉鍚 "equals"鍦JAVA涓鏄竴涓柟娉曘"=="鍦↗AVA涓彧鏄竴涓繍绠楃鍚堛備緥瀛:Student student1 = new Student();Student student2 = new Student();System.out.println(student1.equals(student2));System.out.println(student1 ...
  • java閲 equals鍜== 鍖哄埆
    绛旓細==鏄竴涓瘮杈冭繍绠楃锛屽熀鏈暟鎹被鍨嬫瘮杈鐨鏄硷紝寮曠敤鏁版嵁绫诲瀷姣旇緝鐨勬槸鍦板潃鍊笺傦紙姣旇緝鍦板潃鍊煎嵆鏄寚鏄惁涓哄悓涓涓璞$殑寮曠敤锛equals()鏄竴涓柟娉曪紝鍙兘姣旇緝寮曠敤鏁版嵁绫诲瀷銆傞噸鍐欏墠姣旇緝鐨勬槸鍦板潃鍊硷紝閲嶅啓鍚庢瘮涓鑸槸姣旇緝瀵硅薄鐨勫睘鎬с
  • JAVA涓瀛楃涓叉瘮杈equals鍜宔qualsIgnoreCase鐨勫尯鍒
    绛旓細鍦Java涓涓鑸皢瀛楃涓蹭綔涓簊pring绫诲瀷瀵硅薄鏉ュ鐞嗭紝涔熷彲浠ュ皢瀛楃涓蹭綔涓哄唴缃殑瀵硅薄澶勭悊锛屽厑璁窲ava鎻愪緵鍗佸垎涓板瘜鐨勫姛鑳界壒鎬т互鏂逛究澶勭悊瀛楃涓层傚湪杩欎簺瀛楃涓蹭腑锛宔quals鍜宔qualsIgnoreCase鐨勫尯鍒紝鍙互鐢ㄤ互涓嬫柟娉曞幓鍖哄埆锛氫娇鐢equals( )鍘绘瘮杈冧袱涓瓧绗︿覆鏄惁鐩哥瓑锛屼富瑕佸舰寮忥細boolean equals(Object str)瑙f瀽锛氳繖绉嶆瘮杈冧富瑕...
  • java涓鍙互鐢==鏉ユ瘮杈冧袱涓瓧绗︿覆鏄惁鐩哥瓑鍚
    绛旓細JAVA姣旇緝涓や釜瀛楃涓叉槸鍚︾浉绛夊彲浠ョ敤equals鏂规硶鎴栬呮槸鈥==鈥濄俥quals 鏂规硶甯稿父鐢ㄦ潵妫娴嬩袱涓璞℃槸鍚︾浉绛夛紝鍗充袱涓璞鐨鍐呭鏄惁鐩哥瓑锛屽鏋滃彧鏄瘮杈冨璞$殑鍐呭锛岃屼笉姣旇緝瀵硅薄鏉ユ簮鍜屽姛鑳界被鍨嬫椂锛屽父鐢ㄦ鏂规硶銆傗==鈥濆父鐢ㄤ簬鐢ㄤ簬姣旇緝寮曠敤鍜屾瘮杈冨熀鏈暟鎹被鍨嬫椂鏄惁鍏锋湁涓嶅悓鐨勫姛鑳斤紝姣旇緝鍩烘湰鏁版嵁绫诲瀷锛屽鏋滀袱涓肩浉鍚岋紝...
  • java涓璭quals鏂规硶鐩稿搴旂殑涓嶇瓑浜庢槸?
    绛旓細java涓鏈墄xx.equals(xxx)锛岄偅鐩稿搴旂殑"涓嶇瓑浜"鏄庝箞鍐欑殑锛 java涓湁xxx.equals(xxx)鍏剁浉瀵瑰簲鐨"涓嶇瓑浜"鐨勫啓娉曪細!xxx.equals(xxx)銆俥quals鏂规硶鐨勮繑鍥炲兼槸甯冨皵绫诲瀷(boolean)鐨勫氨鏄湡锛坱rue锛夊亣锛坒alse锛夛紱boolean bool = a.equals(b)锛涚瓑浜庣殑璇漛ool灏辨槸true锛屼笉绛変簬鐨勮瘽bool灏辨槸false銆侸ava鏄...
  • JAVA涓瀛楃涓叉瘮杈equals鍜宔qualsIgnoreCase鐨勫尯鍒
    绛旓細equals锛屾柟娉曞睍绀猴細public boolean equals(Object anObject)灏嗘瀛楃涓蹭笌鎸囧畾鐨瀵硅薄姣旇緝銆傚綋璇ュ弬鏁颁笉涓 null锛屽苟涓旀槸涓庢瀵硅薄琛ㄧず鐩稿悓瀛楃搴忓垪鐨 String 瀵硅薄鏃讹紝缁撴灉鎵嶄负 true锛屽惁鍒欎负false銆俥qualsIgnoreCase锛屾柟娉曞睍绀猴細public boolean equalsIgnoreCase(String anotherString)灏嗘 String 涓庡彟涓涓 String 姣旇緝...
  • 鍏充簬java 鐨別quals鏂规硶銆
    绛旓細鍦ㄨ繖鏍鐨鎯呭喌涓嬶紝 濡傛灉瓒呯被涔熸病鏈夐噸鍐equals()浠ュ疄鐜版湡鏈涚殑琛屼负锛岃繖鏃舵垜浠氨闇瑕侀噸鍐檈quals鏂规硶銆俢lass MM{ String i;MM(String i){ this.i=i;} public boolean equals(Object o){ if(!(o instanceof MM))return false;MM p = (MM)o;return p.i == i;} } ...
  • 鍦java涓arg[0].equals();琛ㄧず鏄粈涔堟剰鎬
    绛旓細arg銆0銆戞槸浣犵粰瀹氱殑鍛戒护琛屽弬鏁帮紝鍙湪dos鍛戒护妗嗕腑浼犲叆銆俥quals鐨勬剰鎬濆氨鏄瓑浜庛傛墍浠rg銆0銆戙equals锛堬級鐨鎰忔濆氨鏄垽鏂袱涓兼槸鍚︾浉绛夈俛rg[0]锛堝彲鏁板瓧锛屽彲瀛楃涓诧級鏄惁=?锛堝緱缁欏嚭姣旇緝鐨勫硷級銆
  • 扩展阅读:java windowbuilder ... java官网官网 ... 黑马java视频 ... 免费学java ... java ajax ... javascript免费网站 ... javascript高级视频 ... java入门网站 ... 国产任天堂switch手柄 ...

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