Javaの参照型変数とインスタンスの挙動を徹底解説!初心者でも理解できる
生徒
「Javaの変数がどのインスタンスを指しているのかがよく分からないんです。どうやって確認すれば良いですか?」
先生
「良い質問ですね。Javaでは、参照型変数がどのインスタンスを参照しているかがプログラムの動作に大きく影響します。具体例で確認してみましょう!」
1. 参照型変数とは?
Javaの変数には、基本型と参照型の2種類があります。基本型は値そのものを保持しますが、参照型はオブジェクトのアドレス(参照)を保持します。以下のコードを見てください。
public class Product {
public String name;
public int price;
public void display() {
System.out.println(name + ", " + price);
}
}
このクラスでは、商品の名前と価格を管理できます。参照型変数は、このクラスから生成されたインスタンスを指し示します。
2. インスタンスの生成と参照
次のコードでは、2つのインスタンスを生成し、それぞれ異なる値を設定しています。
public class Main {
public static void main(String[] args) {
Product product1 = new Product();
Product product2 = new Product();
product1.name = "Laptop";
product1.price = 1500;
product2.name = "Phone";
product2.price = 800;
product1 = product2; // product1がproduct2を参照するように変更
product1.display();
}
}
実行結果は次のようになります:
Phone, 800
この結果は、product1がproduct2と同じインスタンスを参照するようになったためです。
3. 参照の仕組みを理解するポイント
Javaでは、以下の点を理解することが重要です:
- 参照型変数は、インスタンスを直接持つのではなく、インスタンスへのリンクを持つ。
- リンクが変更されると、元のリンク先へのアクセスはできなくなる(ガベージコレクションの対象になる)。
- 複数の変数が同じインスタンスを参照することができる。
このような特性を意識することで、プログラムの動作を正確に把握できます。
4. 練習問題
以下のコードを実行して、結果を予想してみましょう:
public class Test {
public String text;
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
t1.text = "Hello";
t2.text = "World";
t1 = t2;
System.out.println(t1.text);
}
}
答えは「World」です。t1がt2を参照するようになったため、t2.textの値が出力されます。
5. まとめ
この記事では、Javaの参照型変数とインスタンスの関係について詳しく解説しました。参照型変数がインスタンスをどのように参照し、プログラム内でどのように挙動するのかを理解することは、オブジェクト指向プログラミングの基礎です。参照の変更によって元のインスタンスがガベージコレクションの対象となる仕組みも重要なポイントです。
以下のサンプルプログラムを通して、参照型変数がどのようにインスタンスを扱うか、さらに理解を深めましょう。
public class Example {
public String value;
public static void main(String[] args) {
Example ex1 = new Example();
Example ex2 = new Example();
ex1.value = "First Instance";
ex2.value = "Second Instance";
ex1 = ex2; // ex1がex2を参照するように変更
System.out.println("ex1 value: " + ex1.value);
System.out.println("ex2 value: " + ex2.value);
}
}
実行結果は次の通りです:
ex1 value: Second Instance
ex2 value: Second Instance
この結果から、変数ex1とex2が同じインスタンスを参照していることが分かります。参照が変更されたことで、もともとex1が指していたインスタンスはどこからも参照されなくなり、ガベージコレクションの対象となります。
生徒
「参照型変数がどのインスタンスを指しているかを追うのが大事だと分かりました!参照が変わると、元のインスタンスが使われなくなるんですね。」
先生
「その通りです。この仕組みを理解すれば、不要なインスタンスを作らずに効率的なプログラムを書くことができますよ。」
生徒
「変数の参照先が切り替わるタイミングに注意して、練習してみます!」
先生
「良いですね。次は配列やコレクションでの参照型の挙動も学んでみましょう。」