java - 覆盖哈希码方法时获取 "Stack overflow error "

每当我尝试打印 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));
     }
 }

最佳答案

你正在创建无限递归调用 hashCode inside hashCode:

class B {
    @Override
    public int hashCode(){//<----------------------┐
    //                                             │ this path is infinite                  
    System.out.println(this.hashCode()); //   <----┘
    //return this.hashCode();
    }   
}

为了避免这种情况:

  1. 不要在自身内部调用hashCode
  2. 调用父类(super class)hashcode
    注意:如果在这种情况下,class 没有直接继承,它将始终调用 Object hashCode 方法。

  1. 自己编码。
    注意:覆盖并创建一个有效的hashCode方法,您需要在B类中至少有一个字段。

    @Override
    public int hashCode(){
        // code it, or better, make your IDE code it for you
    }   
    

关于java - 覆盖哈希码方法时获取 "Stack overflow error ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733269/

相关文章:

kendo-ui - Kendo 网格数格式化为百分比问题

matlab - 如何迭代matlab中稀疏矩阵中的元素?

sed - 如何使用 sed 将多行追加到一个文件?

php - 从另一台机器访问 wordpress 网站

amazon-web-services - 在 AWS CLI DynamoDB 查询操作中替换变量

visual-studio-2010 - 在调试客户端-服务器应用程序时在解决方案中运行这两个应用程

spring - 为什么当您使用其 ID 保存实体时,从 JPA 存储库中检索的订单会发生变化?

oracle - PL/SQL - 计算重叠时间段之间的不同天数

regex - R 中 SQL LIKE 运算符的等价物

python - 使用 python 请求在 HTTP POST 上规避错误 414