java hashcode 正数_第八十一回:Java中的超级类-Object之hashCode

本文详细介绍了Java中Object类的hashCode()方法,该方法用于返回对象的散列码,通常用于哈希表。文章强调了当重写equals方法时,必须重写hashCode方法以保持一致性。通过示例代码展示了如何根据类的成员变量重写hashCode方法,并对比了使用Arrays.hashCode方法处理数组对象的效果,强调了正确重写hashCode方法的重要性。
摘要由CSDN通过智能技术生成

位看官们,大家好,上一回中咱们说的是Java中的超级类-Object之equals的例子,这一回咱们继续说的是Object之hashCode。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在前面章回中提到了超级类提供的三大方法,这一回中我们详细介绍第二大方法:hashCode。

看官们hashCode()方法用来返回对象的散列码,散列码没有规律,可能是正数或者负数。散列码对每个对象来说是唯一的,因此,有时候也可以通过它来判断两个对象是否相同,不过它最大的用处还是用在哈希表中。

例如:obj.hashCode()表示返回对象obj的散列码。

Object类中该方法的默认实现是把对象的地址转换为整型数值后返回,如果对象为null,那么返回0。不过我们建议在自定义的类中重写该方法。还有一条准则就是,如果重写了equals方法,那么必须重写该方法。有看官们问,这个散列码都不固定,如何重写呢,常用的做法是把自定义类中的每个成员变量都进行hash操作。下面是示例代码,请参考:

@Override

public int hashCode() {

// TODO Auto-generated method stub return Objects.hash(mIntValue,mStrValue);

}

在该代码中mIntValue和mStrValue是自定义类中的两个成员变量。我们使用了Objects的hash方法对这两个成员变量进行了hash操作,该方法的参数是可变的,也就是说它可以接受多个成员变量。其实该方法会分别调用每个参数的hashCode方法,然后把调用hashCode返回的结果统一整理后当做自己的返回值。

看官们,对于数组类型的对象,我们建议使用Arrays类中的hashCode方法,其原因是该类重写了hashCode方法,这点和equals方法是一样的。下面是具体的例子,请参考:

int [] array1 = new int [] {1,2,3};

int [] array2 = new int [] {1,2,3};

//使用Object类默认的方法来输出两个数组散列码 System.out.println("array1 hascode = "+array1.hashCode());

System.out.println("array2 hascode = "+array2.hashCode());

//使用Arrays类中重写的方法来输出两个数组散列码 System.out.println("array1 hascode = "+Arrays.hashCode(array1));

System.out.println("array2 hascode = "+Arrays.hashCode(array2));

运行上面的代码后得到以下运行结果:

array1 hascode = 31168322

array2 hascode = 17225372

array1 hascode = 30817

array2 hascode = 30817

从上面的结果中可以看到,两个具有相同内容的数组,如果使用没有重写的hashCode方法,就会得到不同的散列码,这显然是错误的,而使用重写过的hashCode方法,就可以得到相同的散列码,这正是我们期望得到的结果,因此再次建议大家自定义类的时候重写该方法。

各位看官,关于Java中的超级类-Object之hashCode的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值