为什么这个java equals方法违反了一致性规则

为什么这个java equals方法违反了一致性规则,java,Java,以下示例代码之一是java equals方法的错误实现。它违反了一致性规则。哪一个违反了规则,请指出它在方法中的何处以及如何违反了一致性规则 例1 public class WrongEquals { private final AtomicInteger counter; public WrongEquals(int start) { this.counter = new AtomicInteger(start); } public int getCount() { re

以下示例代码之一是java equals方法的错误实现。它违反了一致性规则。哪一个违反了规则,请指出它在方法中的何处以及如何违反了一致性规则

例1

public class WrongEquals {

private final AtomicInteger counter;

public WrongEquals(int start) {
    this.counter = new AtomicInteger(start);
}

public int getCount() {
    return counter.getAndDecrement();
}

@override public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }   
    WrongEquals that = (WrongEquals) o;
    return counter.get() == that.getCount();
}

@override public int hashCode() {
    return counter.hashCode();
}
}
exmaple 2

public class WrongEquals {

    private final AtomicInteger counter;

    public WrongEquals(int start) {
            this.counter = new AtomicInteger(start);
    }

    public int getCount() {
            return counter.getAndDecrement();
    }

    @override public boolean equals(Object o) {
            if (this == o) {
                    return true;
            }
            if (o == null || getClass() != o.getClass()) {
                    return false;
            }
            WrongEquals that = (WrongEquals) o;
            return getCount() == that.getCount();   //changed here
    }

    @override public int hashCode() {
            return counter.hashCode();
    }
}

您应该已经了解了创建equals方法时应该满足的许多属性。它们是自反的、对称的、传递的和一致的。谷歌有更多的细节,如果你需要它


给定这些属性,请尝试编写一些代码,在每个类上测试它们,并查看哪些失败。这应该相当容易,因为你已经有了这些类的代码。

你认为这是哪一个,为什么你这么认为?这太糟糕了。并不是说关于家庭作业的问题一定不好,但你只是把你的家庭作业贴在这里,没有表现出任何努力。请跟进@SotiriosDelimanolis的要求。还有,什么是一致性规则???除了违反一致性之外,基于可变状态计算哈希代码和相等性不是一个好主意。虽然这是一个提示:阅读并特别注意一致性部分。