您的位置:首页 > 编程语言 > Java开发

Java软件低级错误: 定义equals方法的同时也要定义hashCode方法

2011-05-31 21:29 381 查看
解读:
equals方法用于实现对象之间逻辑上是否相等的判断,而不是判断两个引用是否指向同一个对象,hashCode用于返回对象的哈希码(也有翻译成散列码的),逻辑上相等(equals比较相等)的两个不同对象它们返回的hashCode值肯定不相等。 Java规范中规定:如果两个对象根据equals(Object)方法是相等的,那么调用这两个对象中任一个对象的hashCode方法必须产生同样的整数结果,所以定义equals的同时一定要定义hashCode,并且要保证equals比较相等的对象,hashCode返回值也必须相同。

¨案例:

Map<MyStruct, String> m = new HashMap<MyStruct, String>();
m.put(new MyStruct(707), "Jenny");
System.out.println(m.get(new MyStruct(707)));
上面的代码,MyStruct定义了equals方法,没有定义hashCode,输出的结果原本希望是Jenny,但结果却是null,上面的类定义违反了上面所说的Java规范,运行时实际上有两个MyStruct对象,但逻辑上是同一个对象。MyStruct使用了默认的hashCode实现,使的逻辑上相同的对象(equals比较相等),它们的hashCode却不同,Map查找对象的时候会首先比较hashCode值,然后再使用equals比较,造成Map无法找到期望的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: