gpt4 book ai didi

java - [Java]indexOf是否使用equals?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:18 25 4
gpt4 key购买 nike

我想知道 ArrayList 的 indexOf 方法是如何实现的。事实上,我已经像这样重写了 equals 方法:

public class CustomObject {
@Override
public boolean equals(Object o) {

if(o instanceof CityLoader)
return ((CityLoader)o).getName() == this.name;
else if (o instanceof String)
return this.name.equals((String)o);
return false;
}
}

虽然这会避免我也重写 indexOf 方法,但看来我完全错了。当我尝试

ArrayList<CustomObject> customObjects = new ArrayList<CustomObject>
... insert customobject into the arraylist ...
customObjects.indexOf(new String("name"))

indexOf 返回 false 但它应该返回 true。 (我检查了我要查找的元素是否存在)

我完全错了吗?

最佳答案

equals 永远不会在比较的对象不是同一类型时返回 true(在您的情况下 CustomObjectequals 应该总是返回当 o 不是 CustomObject 的实例时为 false。

indexOf 的实现碰巧使用了 Stringequals 而不是你的 CustomObjectequals 当你传递一个 String 给它时,Stringequals 当你传递给它一个对象时返回 false不是 String

此外,不要在字符串比较中使用==

您应该将 CustomObject 的实例传递给 indexOf :

customObjects.indexOf(new CustomObject("name")) 

(或者 CustomObject 的构造函数看起来像什么)

您的equals 方法应该如下所示:

public boolean equals(Object o) {
if(!(o instanceof CityLoader))
return false;
CityLoader other = (CityLoader)o;
return other.name.equals(this.name);
}

关于java - [Java]indexOf是否使用equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415306/

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