枚举哈希码计算是不一样的



我有一个网站用户的更新页面。 某些user列在枚举中编码。 user的所有信息都转到POJO,并且所有列都经过哈希处理。我的问题是,当我打开此更新页面并更新任何user的一些信息时,它已成功运行。 但是,当我在另一台计算机上打开此网页时,更新过程无法正常工作。我使用"system.out.println"查看了列的哈希代码,我看到两台不同的计算机在列中生成了两个不同的哈希代码,这些代码是用枚举库完成的。我希望我的问题很清楚。 感谢您的任何回复。

 @Override
    public int hashCode() {
        int hash = 3;
        hash = 79 * hash + (this.getId() != null ? this.getId().hashCode() : 0);
        hash = 79 * hash + (this.kullaniciTipi != null ? this.kullaniciTipi.hashCode() : 0);
        hash = 79 * hash + (this.kullaniciAdi != null ? this.kullaniciAdi.hashCode() : 0);
        hash = 79 * hash + (this.parola != null ? this.parola.hashCode() : 0);
        hash = 79 * hash + Arrays.hashCode(this.parmakIzi);
        hash = 79 * hash + (this.zamanAsimi != null ? this.zamanAsimi.hashCode() : 0);
        hash = 79 * hash + (this.tcKimlikNo != null ? this.tcKimlikNo.hashCode() : 0);
        hash = 79 * hash + (this.adiSoyadi != null ? this.adiSoyadi.hashCode() : 0);
        hash = 79 * hash + (this.epostaAdresi != null ? this.epostaAdresi.hashCode() : 0);
        hash = 79 * hash + (this.ekranKisayol != null ? this.ekranKisayol.hashCode() : 0);
        hash = 79 * hash + (this.hataliGirisSayisi != null ? this.hataliGirisSayisi.hashCode() : 0);
        hash = 79 * hash + Objects.hashCode(this.durum);
        hash = 79 * hash + (this.durum != null ? this.durum.hashCode() : 0);
        System.out.println("id : " + this.getId() + "id hash : " +this.getId().hashCode());
        System.out.println("zid : " + this.zamanAsimi + "zid hash : " +this.zamanAsimi.hashCode());
        System.out.println("this.kullaniciTipi.hashCode()" + this.kullaniciTipi.hashCode());
        System.out.println("this.kullaniciAdi.hashCode()" + this.kullaniciAdi.hashCode());
        System.out.println("this.parola.hashCode()" + this.parola.hashCode());
     //   System.out.println("this.parmakIzi.hashCode()" + this.parmakIzi.hashCode());
        System.out.println("this.zamanAsimi.hashCode()" + this.zamanAsimi.hashCode());
        System.out.println("this.tcKimlikNo.hashCode()" + this.tcKimlikNo.hashCode());
        System.out.println("this.adiSoyadi.hashCode()" + this.adiSoyadi.hashCode());
        System.out.println("this.epostaAdresi.hashCode()" + this.epostaAdresi.hashCode());
      //  System.out.println("this.ekranKisayol.hashCode()" + this.ekranKisayol.hashCode());
        System.out.println("this.hataliGirisSayisi.hashCode()" + this.hataliGirisSayisi.hashCode());
        System.out.println("this.durum.hashCode()" + this.durum.hashCode());
        System.out.println("sistem hash : " +hash);
        return hash;
    }

问题是:

  1. hashCode() 的默认实现将对象的内存地址转换为 int。 对象的内存地址不仅因计算机而异,而且可能每次运行程序时都不同。 看到这个问题。
  2. 您被覆盖的 hashCode() 在其计算中使用其他对象的 hashCodes。
  3. 对于这些其他对象中的至少一个,hashCode() 不会被覆盖。
  4. 因此,您被覆盖的 hashCode() 正在调用未被覆盖的 hashCode(),这会导致不一致的结果。

最新更新