gpt4 book ai didi

java - 覆盖 equals 方法不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 19:48:22 26 4
gpt4 key购买 nike

我在这里和其他网站上浏览了很多类似的问题。我似乎仍然无法解决这个问题。

我有一个类:

public class Event {
public String Item;
public String Title;
public String Desc;

@Override
public boolean equals(Object o) {
return true;
}
}

我正在尝试在 ArrayList<Event> events 中使用此类但我找不到获得 events.contains("item") 的方法上类。我试过调试,发现它甚至没有进入覆盖的方法。

我做错了什么?

最佳答案

那是因为你打破了对称性 specified in the contract equals():如果任何事件等于"item"(这是一个字符串),"item" 也应该等于任何事件。

实际上,Java 所做的是在您的列表上调用 indexOf("item"),并检查它是否为正值。

现在,indexOf()ArrayList 中的工作方式如下(参见 complete source code here ):

    for (int i = 0; i < size; i++)
if ("item".equals(elementData[i]))
return i;

所以基本上是 String's equals()此处调用的方法,当然不是返回 false 的方法。

通过简单地为函数指定一个 Event 参数来解决这个问题,例如:

events.contains( new Event("item", "title", "desc") )

请注意,您必须为您的类创建一个适当的构造函数或初始化成员。

关于java - 覆盖 equals 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765350/

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