我有一堂完全一样的课:
public class Operator {
private String oper;
private boolean ltr;
private int pc;
//Ignore these methods...
public Operator(String t,int prc,boolean as) {oper=t;pc=-prc;ltr=as;}
public int precedence() {return pc;}
public boolean associativity() {return ltr;}
public String getName() {return oper;}
public int hashCode() {
int hash = 3;
hash = 19 * hash + (this.oper != null ? this.oper.hashCode() : 0);
hash = 19 * hash + (this.ltr ? 1 : 0);
hash = 19 * hash + this.pc;
return hash;
}
public boolean equals(Object o){
if (o instanceof String){
return oper.equals(o);
}
return false;
}
public String toString(){
return oper;
}
}
当我这样做时:System.out.println(new Operator("+",4,true).equals("+"));
它打印为 true,这意味着 equals 方法正在工作。
但是当我这样做时:
Vector oprs = new Vector();
oprs.addElement(new Operator("+",4,true));
int iof = oprs.indexOf("+");
System.out.println(iof);
iof 是-1
. 手动搜索发现它很好,并System.out.println(oprs.elementAt(0));
打印+
. 我认为indexOf
使用equals
方法来查找元素(就像在 Java SE 中一样)那么到底为什么oprs.indexOf
不工作呢?