为什么Vector.indexOf方法不适用于这个类?

时间:2012-08-29 21:23:00

标签: java vector equals indexof

我的课程完全如下:

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无法正常工作?

1 个答案:

答案 0 :(得分:2)

“+”的类型是String。您无法重新定义String类的相等性,因此您的equals方法不是自反的。查看Comparator类。它(以及使用它的集合类)可能会对您有所帮助。