【发布时间】:2013-08-28 10:02:27
【问题描述】:
我正在努力学习 Java。 Eric Roberts 的文本“Java 的艺术与科学”有一个编程任务,我们在其中模拟航班预订控制台。我想通过使用只有城市字符串的城市类来“分类”。它只有一个字段name,它是一个字符串,但我正在尝试学习如何使用类。
无论如何,所以我不得不重写 City 类中的 equals 方法以避免重复。所以我不得不重写 hashCode 方法。
现在我的HashMap<City,ArrayList<Flight>> 不工作了。它找不到某些值,但仍然允许重复键。
我的城市equals 和hashCode 覆盖如下。谁能看到为什么我的 HashMap 出错了?
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object that) {
// TODO Auto-generated method stub
if ( this == that ) return true;
if ( !( that instanceof City) ) return false;
City aThat = (City) that;
return (name == aThat.name );
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
}
【问题讨论】:
-
问题在于如何比较字符串变量:“name == aThat.name”。通过使用“==”,您只是在比较对象引用而不是内容,与“this == that”相同。要比较 String 对象的内容,您需要 String 对象的 euquals* 方法。与 C++ 不同,您可以在代码中使用的每个对象都只是该对象的引用,Java 中也没有运算符重载。
标签: java hashmap equals hashcode