0

私はまさにこのようなクラスを持っています:

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));印刷し+ます。私は(Java SEのように)要素を見つけるためにメソッドをindexOf使用すると思っequalsたのに、なぜ地球上で機能しないのoprs.indexOfですか?

4

1 に答える 1

2

「+」のタイプは文字列です。Stringクラスの等式を再定義できないため、equalsメソッドは再帰的ではありません。Comparatorクラスをチェックしてください。それ(およびそれを使用するコレクションクラス)が役立つ場合があります。

于 2012-08-29T21:27:14.703 に答える