Java:比较对象值

Java:比较对象值,java,iterator,compare,Java,Iterator,Compare,我试图比较迭代器中x的两个实例的值 x是一种引用类型,它包含自己的数据成员。我试图将x的一个实例与另一个实例进行比较,以确定每个实例中的值是否相同 如果(x等于(x)) 当x的每个实例的值实际不同时,保持计算为true 干杯。这是一个很难用给出的细节回答的问题。它们必须是对象而不是原语才能有.equals方法。那么,是否覆盖了equals方法,导致了错误的比较?那就是我要看的地方。听起来你是在比较参考资料,而不是数据 编辑: 从对象的API文档: 类对象的equals方法在对象上实现了最有区别的

我试图比较迭代器中x的两个实例的值

x是一种引用类型,它包含自己的数据成员。我试图将x的一个实例与另一个实例进行比较,以确定每个实例中的值是否相同

如果(x等于(x))

当x的每个实例的值实际不同时,保持计算为true


干杯。

这是一个很难用给出的细节回答的问题。它们必须是对象而不是原语才能有.equals方法。那么,是否覆盖了equals方法,导致了错误的比较?那就是我要看的地方。

听起来你是在比较参考资料,而不是数据

编辑: 从对象的API文档: 类对象的equals方法在对象上实现了最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时(x==y的值为true),此方法才返回true

e、 g.如果“X”或其父类不重写equals,则当您调用equals时,它将比较引用,如果它们是相同的对象,则引用将始终相等


听上去,你需要重写类“X”中的equals方法,但是你说的话似乎表明它们无论如何都是相同的引用。

对象类中的
equals
方法执行实例equals操作。但是,
Object
的子类重写此方法以执行相对等于操作是很常见的,在该操作中,目标对象内的值将根据所讨论对象的值进行测试。在您的情况下,您最有可能使用的是覆盖了
equals
方法的
Object
子类。了解类
X
equals
方法是如何实现的将是一件好事。

假设您的代码不是这样的

X x = new X();
if(x.equals(x))
但更像

X x = new X();
X y = new X();

if(x.equals(y)) { }
如果您得到了错误的
x.equals(y)
值,那么您的equals实现就被破坏了


转到
类X
,检查equals是如何实现的。如果它没有在X中实现,请检查超类。

我将假设您的两个X对象实际上是不同的对象,而不是错误地是同一个对象。在本例中,问题是该类的equals()实现。检查您的类及其超类的equals()实现,并确保它实际上是智能比较的。如果有必要,写你自己的

class Square
{
    public int length;

    public boolean equals( Square s )
    {
        return this.length == s.length;
    }
}

如果您决定重写equals(),也重写hashcode()

您所说的“x的每个实例都不同”是什么意思?你能提供一个更具体的代码吗?x.equals(x)总是正确的。。。。那么x==x到底是什么意思呢?除非您有一个完全不正常的equals()实现,否则您通过调用x.equals(x)将同一个实例与其自身进行比较,并且它将始终返回true。你到底想做什么?@Override public boolean equals(Object o){returns!super.equals(o);}:请告诉我这不是你正在使用的实际代码。从你发布的内容来看,你正在检查对象x是否等于它本身,它应该总是返回true。是的,我如何比较数据?使用equals()这就是它的用途不,它们是不同的引用。现在尝试覆盖相等。干杯