每当我尝试打印B类哈希码时,我都会遇到上述错误,请告诉我的代码有什么问题?
class B {
@Override
public int hashCode(){
System.out.println(this.hashCode());
//return this.hashCode();
}
}
public class Testing
{
public static void main(String[] args)
{
/*A a = new A(0, null, 1.20);
A a1 = new A(1,null,1.20);
A a3 = null;*/
B b = new B();
System.out.println(b.hashCode());
//System.out.println(a.equals(a1));
//System.out.println(a.equals(a1));
}
}
答案 0 :(得分:3)
嗯,这是一个无休止的递归,因此你得到了StackOverflowError
。
你真正想做的事情可能是。
class B {
@Override
public int hashCode(){
System.out.println(super.hashCode());
//return super.hashCode();
}
}
如果你想覆盖你的实现并打印它,你应该这样做,例如这样。
class B {
private Long id = Long.valueOf(0L);
private String name = "";
@Override
public int hashCode(){
final int hashCode = 17 * id.hashCode() + 31 * name.hashCode();
System.out.println(hashCode);
return hashCode;
}
}
或者如果您只是想打印它,那么在hashCode
身体中什么都不做。
class B {}
public class Testing
{
public static void main(String[] args)
{
B b = new B();
System.out.println(b.hashCode());
}
}
答案 1 :(得分:3)
你正在hashCode中创建无限递归调用hashCode
:
class B {
@Override
public int hashCode(){//<----------------------┐
// │ this path is infinite
System.out.println(this.hashCode()); // <----┘
//return this.hashCode();
}
}
为避免这种情况:
hashCode
。 hashcode
class
没有直接继承,则始终会调用Object
hashCode方法。或
自己编码。
注意:到override
并创建有效的hashCode
方法,B
类中至少需要一个字段。
@Override
public int hashCode(){
// code it, or better, make your IDE code it for you
}
}
答案 2 :(得分:1)
不要从hashCode()方法调用this.hashCode()。它似乎是递归函数,它将带你到Stack over flow error。