カテゴリ: JavaSilver試験対策 更新日: 2025/12/01

Javaの同一性と同値性をわかりやすく解説!初心者向けの基礎知識

027
Javaの同一性と同値性

先生と生徒の会話形式で理解しよう

生徒

「Javaで2つのオブジェクトが同じかどうかを判定したいのですが、どうすればよいですか?」

先生

「それはJavaの同一性同値性を理解することが重要です。それぞれについて詳しく説明しますね。」

生徒

「同一性と同値性ですか?違いがよくわからないです。」

先生

「大丈夫ですよ!同一性はオブジェクトの参照が同じかどうか、同値性はオブジェクトの値が等しいかどうかを表します。これから詳しく説明していきますね。」

1. Javaにおける同一性とは?

1. Javaにおける同一性とは?
1. Javaにおける同一性とは?

Javaで「同一性」とは、2つの変数が同じインスタンスを参照していることを意味します。同一性の判定には==演算子を使用します。

例: 同一性を確認するコード


public class IdentityExample {
    public static void main(String[] args) {
        Object obj1 = new Object();
        Object obj2 = obj1; // obj1の参照をobj2にコピー
        System.out.println(obj1 == obj2); // trueが出力される
    }
}

このコードでは、obj1obj2は同じオブジェクトを参照しているため、==の結果はtrueになります。

2. 問題のコード解説

2. 問題のコード解説
2. 問題のコード解説

以下のコードを確認してみましょう。


public class Main {
    public static void main(String[] args) {
        Sample obj1 = new Sample(10);
        Sample obj2 = obj1;
        obj1 = new Sample(10);
        System.out.println(obj1 == obj2);
    }
}

このコードでは、以下のように処理が進行します:

  1. Sample型の新しいインスタンスを作成し、その参照をobj1に代入します。
  2. obj1の参照をobj2にコピーします。
  3. Sample型の新しいインスタンスを作成し、その参照をobj1に代入します。

その結果、obj1obj2は異なるインスタンスを参照しているため、==の結果はfalseになります。

3. 同一性と同値性の違い

3. 同一性と同値性の違い
3. 同一性と同値性の違い

Javaでは、同一性と同値性は以下のように区別されます:

  • 同一性: 2つの変数が同じオブジェクトを参照しているかどうか(==で判定)。
  • 同値性: 2つのオブジェクトの値が等しいかどうか(equals()メソッドで判定)。

例: 同一性と同値性の違いを確認するコード


public class EqualityExample {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");
        System.out.println(str1 == str2); // false: 異なるインスタンスを参照
        System.out.println(str1.equals(str2)); // true: 値が等しい
    }
}

この例では、str1str2は異なるインスタンスですが、値が同じためequals()の結果はtrueになります。

4. 注意点とコツ

4. 注意点とコツ
4. 注意点とコツ
  • オブジェクトの比較方法を理解する:オブジェクトの参照を比較する場合は==、値を比較する場合はequals()を使う。
  • 意図的な設計を:カスタムクラスで値の比較を行いたい場合、equals()メソッドをオーバーライドする。
  • デバッグの際のチェック:参照の比較と値の比較を混同しないように注意。

5. 実践課題

5. 実践課題
5. 実践課題

次のコードを試して、同一性と同値性の違いを確認してください:


public class Practice {
    public static void main(String[] args) {
        Sample obj1 = new Sample(20);
        Sample obj2 = obj1;
        obj1 = new Sample(20);
        System.out.println(obj1 == obj2); // 結果は?
    }
}

このコードの実行結果を確認して、obj1obj2が参照しているオブジェクトを理解しましょう。

6. まとめ

6. まとめ
6. まとめ

Javaの同一性と同値性について学びました。同一性は==演算子を使って、2つの変数が同じオブジェクトを参照しているかを確認します。一方、同値性はequals()メソッドを用いて、オブジェクトの値が等しいかを確認します。これらを理解することで、コードの意図を正確に反映させることが可能になります。また、参照の変更や新しいインスタンスの生成が、結果にどのように影響を与えるのかを明確に理解することが大切です。

サンプルコード: 同一性と同値性の再確認


public class SummaryExample {
    public static void main(String[] args) {
        String value1 = "Java";
        String value2 = new String("Java");
        System.out.println(value1 == value2); // false: 異なる参照
        System.out.println(value1.equals(value2)); // true: 同じ値
    }
}

このコードでは、リテラルと新しいインスタンスを比較しています。==では異なる参照を持つためfalseを返し、equals()では値が同じであるためtrueを返します。

先生と生徒の振り返り会話

生徒

「同一性と同値性について、やっと理解できました!でも、コードを書くときにいつも混乱してしまいそうです。」

先生

「最初は混乱するかもしれませんが、基本を押さえれば大丈夫です。同一性は参照、同値性は値の比較と覚えておくと簡単ですよ。」

生徒

「これからは、コードを書くときに==equals()の使い分けを意識してみます!」

先生

「素晴らしい意識ですね!それに加えて、カスタムクラスで値の比較が必要な場合はequals()メソッドをオーバーライドするのも覚えておいてください。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaで「同一性」と「同値性」はどう違うのですか?

Javaにおける「同一性」とは、2つの変数が同じオブジェクトを参照しているかを意味し、「==」演算子を使って比較します。一方「同値性」とは、2つのオブジェクトの中身(値)が等しいかどうかで、「equals()」メソッドで比較します。
JavaSilver試験対策の一覧へ
新着記事
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
Java のインターフェースとは?普通のクラスとの違いを学ぼう
Javaのインターフェースとは?普通のクラスとの違いを学ぼう【初心者向け解説】
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説