0Pricing
Java Academy · レッスン

thisとtoString/equals/hashCode

thisで現在のオブジェクトを参照し、役立つtoStringを記述し、equalsとhashCodeを正しく実装します。

「thisとtoString/equals/hashCode」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。

this キーワード

this は現在のオブジェクトを指します。フィールドへのアクセスや、別のコンストラクタの呼び出しに使います。引数名とフィールド名が同じ場合にも役立ち、意図を明確にできます。

読みやすい toString

toString() は、オブジェクトの内容を人間が読みやすく要約して返します。id や name などの主要なフィールドを表示するようにオーバーライドします。ログやデバッグ出力が、はるかに理解しやすくなります。

equals と ==

equals は論理的な等価性を確認し、== は 2 つの参照が同じオブジェクトを指しているかを確認します。多くのドメインクラスでは、メモリアドレスではなく内容で比較するように equals をオーバーライドします。

hashCode は equals と一致させる

hashCode は equals と一貫していなければなりません。a.equals(b) が true なら、a.hashCode() は b.hashCode() と等しくなる必要があります。この規則は、HashSet と HashMap を正しく動作させるために必要です。

ヒントと注意点

等価性には、id や email のように変化しないフィールドを選び、toString は短く保ちます。equals や hashCode の中で可変コレクションを使うのは避けてください。迷ったときは、IDE でメソッドを生成してから内容を確認します。

コード:this、equals、hashCode

このデモでは、同じ内容を持つ 2 つの人物オブジェクトを作成します。equals は true を返し、ハッシュコードは一致し、HashSet は 2 つ目のオブジェクトを見つけられます。

public class Main {
  // Simple Person class to demo this, toString, equals, hashCode
  static class Person {
    private int id;
    private String name;

    // Constructor uses this to set fields
    Person(int id, String name) {
      this.id = id;       // this.id refers to the field
      this.name = name;   // name comes from the parameter
    }

    // Human friendly string
    @Override
    public String toString() {
      return "Person{id=" + id + ", name=" + name + "}";
    }

    // Logical equality: same id and same name
    @Override
    public boolean equals(Object o) {
      if (this == o) return true;                 // same reference
      if (o == null || getClass() != o.getClass()) return false;
      Person other = (Person) o;
      if (this.id != other.id) return false;
      // Compare names safely (null aware)
      if (this.name == null) return other.name == null;
      return this.name.equals(other.name);
    }

    // Hash code consistent with equals
    @Override
    public int hashCode() {
      int result = Integer.hashCode(id);
      result = 31 * result + (name == null ? 0 : name.hashCode());
      return result;
    }
  }

  public static void main(String[] args) {
    // Create two persons with the same content
    Person a = new Person(1, "Ada");
    Person b = new Person(1, "Ada");

    // toString shows readable info
    System.out.println(a);

    // equals compares content, not memory address
    System.out.println("a == b ? " + (a == b));           // false (different objects)
    System.out.println("a.equals(b) ? " + a.equals(b));   // true (same content)

    // hashCode must match for equal objects (useful in hash collections)
    System.out.println("hash(a) = " + a.hashCode());
    System.out.println("hash(b) = " + b.hashCode());

    // Example with HashSet: contains works because equals and hashCode agree
    java.util.Set<Person> set = new java.util.HashSet<>();
    set.add(a);
    System.out.println("set contains b ? " + set.contains(b)); // true
  }
}

契約の確認

確認問題:equals をオーバーライドした場合、ほかに何をすべきですか。また、それはなぜですか。

まとめ

まとめ:this はフィールドへのアクセスを明確にし、toString はデバッグに役立ち、equals は内容を比較し、hashCode はコレクションの一貫性を保ちます。

よくある質問

「thisとtoString/equals/hashCode」レッスンは無料ですか?

はい。「thisとtoString/equals/hashCode」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。

「thisとtoString/equals/hashCode」で何を学びますか?

thisで現在のオブジェクトを参照し、役立つtoStringを記述し、equalsとhashCodeを正しく実装します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「thisとtoString/equals/hashCode」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. thisとtoString/equals/hashCode
  2. オブジェクトのコンポジション
  3. ドメインのモデル化(UML→コード)
← Java Academyに戻る