首页 > 代码库 > 为什么重写equals方法必须重写hashCode?
为什么重写equals方法必须重写hashCode?
如果两个对象调用equals返回相等,那么这两个对象调用hashCode方法必须返回相同的整数。如果不重写hashCode,会违反该原则。这个原则主要针对的是映射操作(map接口)。
注意:
1. String重写了Object的equals,现在比较的是两个String所包含的char sequence是否相等。
String s1 = new String("hello"); String s2 = new String("hello");
s1.equals(s2)返回true
1 import java.util.HashMap; 2 import java.util.Map; 3 public class MapTest { 4 public static void main(String[] args) { 5 Map<String,Value> map1 = new HashMap<String,Value>(); 6 String s1 = new String("key"); 7 String s2 = new String("key"); 8 Value value = http://www.mamicode.com/new Value(2); 9 map1.put(s1, value); 10 System.out.println("s1.equals(s2):"+s1.equals(s2)); 11 System.out.println("map1.get(s1):"+map1.get(s1)); 12 System.out.println("map1.get(s2):"+map1.get(s2)); 13 14 15 Map<Key,Value> map2 = new HashMap<Key,Value>(); 16 Key k1 = new Key("A"); 17 Key k2 = new Key("A"); 18 map2.put(k1, value); 19 System.out.println("k1.equals(k2):"+s1.equals(s2)); 20 System.out.println("map2.get(k1):"+map2.get(k1)); 21 System.out.println("map2.get(k2):"+map2.get(k2)); 22 } 23 24 /** 25 * 键 26 * @author zejian 27 * 28 */ 29 static class Key{ 30 private String k; 31 public Key(String key){ 32 this.k=key; 33 } 34 35 @Override 36 public boolean equals(Object obj) { 37 if(obj instanceof Key){ 38 Key key=(Key)obj; 39 return k.equals(key.k); 40 } 41 return false; 42 } 43 } 44 45 /** 46 * 值 47 * @author zejian 48 * 49 */ 50 static class Value{ 51 private int v; 52 53 public Value(int v){ 54 this.v=v; 55 } 56 57 @Override 58 public String toString() { 59 return "类Value的值-->"+v; 60 } 61 } 62 }
为什么重写equals方法必须重写hashCode?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。