栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 1.7的hashCode()重写不符合我的预期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 1.7的hashCode()重写不符合我的预期

问题是您提供了一个错误

equals
:应该
equals(Object)
,而不是
equals(Car)

本质上,您提供了一个 重载 而不是 override ,因此

HashMap
始终
equals
从基类中调用。

解决此问题的方法很简单:添加一个执行强制转换的覆盖,并调用

equals
您编写的方法,如下所示:

@Overridepublic boolean equals(Object other) {    return (other instanceof Car) && equals((Car)other);}

注意注释的使用

@Override
。它可以帮助Java帮助您自动发现此类问题。

注意:对于这个问题,请考虑

hashCode
以更“节省”的方式实现您的方法。与其
(this.getCarName() +this.getCarModel())
仅出于获取其哈希码的目的而创建丢弃字符串,还不如考虑如下重写该方法:

public int hashCode() {    return 31*getCarName().hashCode() + getCarModel().hashCode();}

或在Java 1.7+中,您可以编写

public int hashCode() { // Thanks, fge, for a nice improvement!    return Objects.hash(carName, carModel);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483743.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号