【发布时间】:2014-04-09 15:25:52
【问题描述】:
我正在为迷宫编程,但遇到了一些问题。
我有:
HashSet<State> closedList = HashSet<State>(); //it hold State objects
我的State 类如下所示:
public class State implements Comparable<State>{
private double f;
private double g;
private String state;
private State prev;
.
.
.
closedList.add(state);
closedList().contains(state); // this equals true
但是当我这样做时:
State temp = State(0,0,"");
temp.setStateName(state.getStateName());
closedList().contains(temp); // this equals false
我在State中实现了equals和hashCode:
@Override
public int hashCode(){
return state.hashCode();
}
@Override
public boolean equals(Object object){
if(this.state == object){
return true;
}
if(object == null || object.getClass() != this.getClass()){
return false;
}
return false;
}
【问题讨论】:
-
你期待有什么不同吗?再次仔细检查您的代码...(提示:
.equals()) -
我很抱歉,我对 java 很菜鸟,equals 中的问题是什么?
-
除非
this.state == this == object,否则您的equals方法毫无意义。 -
很简单:您希望两个新对象以相同的状态被初始化以指向相同的引用 (
==);但这种情况并非如此。这就是.equals()的用途 -
在我看来,最好的学习方式是阅读开源代码。番石榴 javadocs : docs.guava-libraries.googlecode.com/git/javadoc/com/google/…, java.lang.Object)