两个对象值相同(x.equals(y)==true)

2025-04-27 19:42:31
推荐回答(3个)
回答1:

是对的,每个类默认继承Object对象,关键是看你如何去实现 hashCode()和equals()这两个函数;
给你个实例去运行感受下,再去看下String这个类的源代码,比较下这两个函数的实现方法;
和这些函数类似的一个函数是 toString() 等 都值得研究下的。对于入门还是很有帮助的。
public class MyTest
{

private int data = 0;

public int getData() {
return data;
}

public void setData(int data) {
this.data = data;
}

public MyTest(int i)
{
this.data = i;
}

@Override
public boolean equals(Object obj)
{
return (this.getData() == ((MyTest)obj).getData());
}

@Override
public int hashCode()
{
Random r = new Random();
return r.nextInt();
}

public static void main(String[] args)
{
MyTest t1 = new MyTest(10);
MyTest t2 = new MyTest(10);

System.out.println(t1.equals(t2));
System.out.println(t1.hashCode());
System.out.println(t2.hashCode());

}

}

回答2:

对阿
可以选择重写equals()方法,就可以了,值相等并不代表事项等的

回答3:

这句话是对的。
两个对象值相同(x.equals(y)==true),说明equals方法是被重新过的,如果没有重写过equals方法,那么x.equals(y)比较的是地址,重写过,比较的就是值了,所以结果才为true。同样的呀,如果没有重写hashcode()方法,那么它们的hashcode是不同的,重写了就相同。