如何在Java中修复/实现equals方法? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中修复/实现equals方法? [重复]相关的知识,希望对你有一定的参考价值。
我正在尝试在Java中实现equals方法的扩展。问题是,由于某种原因,它会给出错误的答案。
public class Cordes{
private static double x;
private static double y;
public Cordes(double x, double y) {
this.x = x;
this.y = y;
}
public boolean equals(Object somethingelse) {
if (this == somethingelse) {
return true;
}
if (somethingelse instanceof Cordes) {
Cordes theother = (Cordes) somethingelse;
return (this.x == theother.x) && (this.y == theother.y);
}
return false;
}
public static void main(String[] args) {
Cordes p = new Cordes(2.0, 4.0);
Cordes p2 = new Cordes(3.0, 4.0);
System.out.println(p.equals(p2));
}
所以这是真的,尽管它显然应该是假的。我不知道在这里尝试什么,代码的第一部分尝试匹配内存地址,这应该是假的。另一个if语句试图查看它是否是我们类的一部分,如果是,它将尝试查看这些坐标是否相等而应该返回false。
除此之外,我还有一个小问题:当我们在“somethingelse”上施放Cordes时,这实际意味着什么,不是其他对象已经是对象,为什么我们必须抛出它,为什么这个动作让我们去“theother.x / theother.y”。
提前致谢!
您将成员变量声明为静态:
private static double x;
private static double y;
这意味着它们由Cordes的所有实例共享。构造第二个时,它会更改两者的值。如果从这两行中删除static
,它应该没问题。
从x和y中删除static
。 static
变量对于这些类的所有实例都是相同的。
private double x;
private double y;
这两个字段不应该是static
,
private static double x;
private static double y;
这些应该是instance
变量,因为您正在创建不同的对象并进行比较。删除static
修饰符,它应该工作。
通过声明x
和y
静态:
private static double x;
private static double y;
你使它成为一个类变量而不是一个实例变量,这意味着所有实例都具有相同的x
和y
值。
这就是为什么equals
适用于Cordes
的每个实例。
要修复删除静态修改器。
编辑:至于附带问题:您正在将Object
类型的参数传递给equals
。你把它投射到Cordes
,意思是告诉编译器不仅是Object
而且是Cordes
类型的对象,可以像对待一样对待。
您已将x和y声明为静态变量。因此,当您使用x = 3.0创建对象p2时,它会自动更改对象p的先前x值。
所以只需删除静态关键字
private static double x;
private static double y;
您将获得所需的结果。
以上是关于如何在Java中修复/实现equals方法? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java通过ArrayList的contains(Object o)方法实现去重字符串中的字符
Day11-Java中String的equals方法如何实现
Day11-Java中String的equals方法如何实现