为什么这个java equals方法违反了一致性规则
以下示例代码之一是java equals方法的错误实现。它违反了一致性规则。哪一个违反了规则,请指出它在方法中的何处以及如何违反了一致性规则 例1为什么这个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
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的要求。还有,什么是一致性规则???除了违反一致性之外,基于可变状态计算哈希代码和相等性不是一个好主意。虽然这是一个提示:阅读并特别注意一致性部分。