gpt4 book ai didi

java - 为什么 Vector.indexOf 方法不适用于此类?

转载 作者:行者123 更新时间:2023-12-02 07:36:19 26 4
gpt4 key购买 nike

我有一个类似这样的类(class):

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 不起作用?

最佳答案

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

关于java - 为什么 Vector.indexOf 方法不适用于此类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12186715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com