Code Fix

上級 › equals と hashCode を必ずセットで実装する理由 › パターン5

equals と hashCode を必ずセットで実装する理由

HashSetやHashMapが先にハッシュ値で振り分けるためです。

 1  import java.util.Objects;
 2  
 3  public class Main {
 4      static class Point {
 5          int x, y;
 6          Point(int x, int y) { this.x = x; this.y = y; }
 7          @Override public boolean equals(Object o) {
 8              if (!(o instanceof Point)) return false;
 9              Point p = (Point) o;
10              return x == p.x______________;
                                      ^
11          }
12          @Override public int hashCode() { return Objects.hash(x, y); }
13      }
14      public static void main(String[] args) {
15          System.out.println(new Point(1, 2).equals(new Point(1, 9)));
16      }
17  }
出力: true期待: false (コンパイルは通っています)

空欄を埋めてビルドを通す

広告
広告スロット(未設定)

equals と hashCode を必ずセットで実装する理由

引数をObjectにする理由も扱います。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)