参照の仕組み
配列は参照型と言われ、int型などとは仕組みが違います。この参照という考え方は少し難しいですが、配列を操作する上で必要な考え方です。
参照の仕組み 目次
1.参照とヒープ
配列は、複数のデータをインデックスで区別して操作できるデータ構造です。データとそれを操作する機能をひとまとまりにしたものを「オブジェクト」と言いますが、配列もオブジェクトにあたります。
オブジェクトは、ヒープと呼ばれるメモリ領域に格納されますが、このヒープとはJVMが管理している領域のことです。各要素に格納した実際の値は、このヒープに格納されており、配列変数の中には、そのヒープ内の場所を示す情報だけが格納されています。
この配列変数に格納されている、ヒープ領域の場所を示す情報のことを「参照」と言います。
配列変数自体に、各要素の値(実体)が格納されている訳ではなく、各要素の値は倉庫の中に格納されており、配列変数はあくまで倉庫内の場所(番号)を示す情報を持っているだけです。
2.参照の仕組み
参照とは、ヒープ上にあるオブジェクトの場所を指し示す情報(これもインデックスと言える)のことです。つまり、オブジェクトの実体は倉庫に入れておいて、人間は各倉庫のドアの鍵だけを手に持っておく、というイメージです。こうすることで、常にデータそのものを持ち歩く必要がないので軽快に働けるのはイメージしやすいと思います。
配列を操作する時は、配列変数の中に格納されている参照を元に、実データの保管場所にアクセスします。配列変数が持つ参照が示すのは、あくまでどの倉庫のドアを開ければ良いかという情報だけですので、その倉庫の中の荷物(データ)を取り出すには配列のインデックスを指定することになります。
3.参照の中身は何か
配列変数の中身は実体の格納場所を指す参照であると言いましたが、では参照自体はどのようなデータになっているのでしょうか。println関数で配列変数自体を指定すれば、その中身を表示することができます。
package pac01; public class HelloWorld { public static void main(String[] args) { // 要素数3のint型の配列 int[] intArray = {3, 2, 8}; // intArrayのインデックスにカウンタ変数iを指定している System.out.println(intArray); } } ----------------------------------------------------------- [I@1db9742
参照の中身のデータを表示できましたが、全く意味不明な文字列ですね。これはJavaだけが解読できる形式になっていて、人間が見る為のものではありません。と言うよりも、この値を開発者が変更できてしまったりするとプログラムの動作に支障を来しますので、開発者が解読不能な形になっていて、変更することもできなくなっています。
最近のコメント