gpt4 book ai didi

java - 等于方法覆盖问题

转载 作者:行者123 更新时间:2023-11-29 10:15:04 25 4
gpt4 key购买 nike

我是java的新手。我已经覆盖了equalshashcode对于我的动物课。我希望使用 HashSet<Animal>如下,只有一个Animal将被插入 HashSet .然而第二个Animal尽管具有相同的属性,对象仍被添加到集合中。任何人都可以调查一下吗?

import java.util.*;

class SetTest
{
public static void main(String [] args)
{
Set<Animal>s=new HashSet<Animal>();
Animal a=new Animal(2);
boolean b1=s.add(a);
System.out.println("hi "+b1);

Animal b=new Animal(2);
boolean b2=s.add(b);
System.out.println("hi "+b2);
}
}


class Animal
{
int t;
Animal(int a)
{
t=a;
}

public boolean equals(Object O)
{
if(O instanceof Animal && ((Animal)O).t==t)
return true;

return false;
}

public int hashcode()
{
return t;
}
}

输出:嗨,真的你好

非常感谢。

最佳答案

您没有覆盖 hashCode()。您引入了另一个名为 hashcode() 的方法。案例很重要。

当您打算覆盖一个方法时,请始终使用@Override 注释:

@Override
public int hashcode()

如果您这样做了,编译器会注意到拼写错误并拒绝编译该类。

关于java - 等于方法覆盖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186935/

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