【发布时间】:2014-09-19 15:03:06
【问题描述】:
我有一个最终字符串作为唯一 ID 的课程。当然我想覆盖equals所以比较只基于ID。像下面这样只返回 ID 的哈希码是正确的做法吗?
class ItemSpec{
final String name;
...
@Override
public boolean equals(Object o){
if(o != null && o instanceof ItemSpec){
return name.equalsIgnoreCase(((ItemSpec)o).name);
} else{
return false;
}
}
@Override
public int hashCode(){
if(name == null){
return 0;
} else{
return name.hashCode();
}
}
}
【问题讨论】:
-
请注意,您的
equals方法假定name不为空,但您的hashCode方法假定它可能为空。是哪个? -
@JonSkeet 抱歉,我在添加后注意到了这一点。已编辑。
-
看不到编辑。在 equals 中仍然不能为空。
标签: java hashcode class-members