gpt4 book ai didi

java - HashCode和equals对对象实例化的影响

转载 作者:行者123 更新时间:2023-12-01 10:38:04 25 4
gpt4 key购买 nike

我做了一些关于方法的测试。我遇到一个案例,让我完全困惑。这是一个例子。

public abstract class Ge {

private boolean valid;

public Ge(boolean valid) {
this.valid = valid;
}

@Override
public int hashCode() {
return this.getClass().getSimpleName().hashCode();
}

@Override
public boolean equals(Object obj) {
if (getClass() == obj.getClass())
return true;
return false;
}
}

public class Ge1 extends Ge{

public Ge1(boolean valid) {
super(valid);
}
}

public class Ge1 extends Ge{

public Ge1(boolean valid) {
super(valid);
}
}

public class Ge2 extends Ge{

public Ge2(boolean valid) {
super(valid);
}
}

测试类:

public static void main(String args[]){
Ge1 ge1=new Ge1(true);
System.out.println(Integer.toHexString(System.identityHashCode(ge1)));
Ge1 ge11=new Ge1(false);
System.out.println(Integer.toHexString(System.identityHashCode(ge11)));
}

虽然System.identityHashCode在eclipse控制台中的值不同,但 Debug模式下的ge1和ge11变量具有相同的引用。

但是,如果我删除 Ge 类中的 hashcode 和 equals,ge1 和 ge11 就会有不同的引用。

我不明白为什么 ge1 和 ge11 具有相同的 hashcode 和 equals 引用?

1

最佳答案

对象的 toString() 方法记录为

this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

您的算法为 Ge1 的所有实例提供相同的 hashCode。

因此 Ge1 的所有实例也具有由 toString() 返回的相同值,并由 Eclipse 显示。

关于java - HashCode和equals对对象实例化的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com