hash code

        Java 中有一个规定,就是两个相同(equals) 的对象,它们的hash code 也必须相同!在Object 类中有一个hashCode方法(int 类型的整数)。以MyObject类为例:   

public class Prog
{
    
public static void main(String argv[]){
        MyObject obj1
=new MyObject(1);
        MyObject obj2
=new MyObject(1);
        MyObject obj3
=new MyObject(3);
             System.out.println(
"obj1's hash code:"+obj1.hashCode());
             System.out.println(
"obj2's hash code:"+obj2.hashCode());
             System.out.println(
"obj3's hash code:"+obj3.hashCode());
    }

}

 程序执行结果为:
obj1's hash code:509639

obj2's hash code:746185

obj3's hash code:178753

        可以看到三个MyObject 类的对象的hash code都不相同,尽管obj1,obj2是内容相同的(equals)。这样就违反了JAVA的规定,所以当改写equals方法时,也请一并改写haseCode方法。

        hashCode方法的改写方式取得用于equals方法的属性wrapper类的hash code,然后返回它。如果有几个属性用于equals方法中的话,则将这几个属性的wrapper类的hash code做XOR运算后返回。这也是JAVA建议使用的方法。所以在MyObject 类中再加一个hashCode方法。

public   int  hashCode() {
    
return (new Integer(data).hashCode());
}

修改完MyObject类后,再去执行上面的程序,结果为:

obj1's hash code:1

obj2's hash code:1

obj3's hash code:3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值