1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

【Java入門】初心者が知っておくべき参照型を解説

Pocket

JAVA言語にて扱うデータには様々な種類があります。
データの種類や形式、値の範囲等を定義したものを「データ型」といいますが、このデータ型には大きく分けて2種類存在します。
今回は、このうちの1種類「参照型(参照データ型)」について説明していきます。

このテーマは、初心者にとっては結構つまずきやすいポイントとなっています。

理解したつもりでも、プログラミングをしていると意外とこの「参照型」が関係して上手く動かないということがあったりします。

※補足
もう1種類に「基本データ型」がありますが、もし基本データ型を知らない人がこの記事を見ているのであれば、まず先にそちらについて調べてからこの記事を見た方がいいでしょう。

参照型とは

JAVA言語で扱うデータ型には「参照型」「基本データ型」というものがあります。

この記事を読んでいる方はもうご存知かとは思いますがおさらいします。
基本データ型の変数は「値そのもの(基本データ値)」を格納します。
⇒つまり変数がデータを持ちます。

例えば、
int x = 5;
int y = x;
y=10;
と記述されていたら、
①変数xを定義し、数値5を代入
②変数yを定義し、xを代入(つまりyに数値5を代入)
③yに数値10を代入
となり、最終的には変数xには「5」が、変数yには「10」が格納されます。

では、参照型の変数何を格納するのでしょうか。ずばり「参照値」を格納します。

参照値と言われても、ピンと来ない人が多いでしょう。

基本データ型は、変数がデータを持ちました。
参照型は、データが確保されているアドレス(参照値)を変数が持つことになります。

それでは具体的に図を用いながら、参照型の値の格納について見ていきましょう。

例1)参照型変数である配列x1とy1のデータ出力

実行すると、出力結果は以下のようになりました。

10~17行目ではそれぞれ配列の要素数分ループし、出力をしています。
この出力結果に対しては、おそらく疑問はないでしょう。

次に20行目で配列y1の「0番目に100」「2番目に200」を代入後、再び同じようにループして出力してみるとどうでしょうか。

基本データ型で学んだ知識で出力結果を予想してみると、
「x1に対しては何も手を加えていないので、x1の出力結果は1回目と変わらずに
y1の出力結果だけ変わる」
となるでしょう。

しかし実際は、「x1の出力結果もy1の出力結果も同じとなっている」

y1にしか代入をしていないのに、なぜx1の方も値が変わってしまったのでしょう。
それこそがこの「参照型」の特徴なのです。

先ほど説明しましたが、参照型の変数は「データが確保されているアドレス(参照値)」を格納します。

図を見るとわかるように参照型の変数には、データが確保されているアドレス(今回の例ではA001番地)が格納されます。

20行目のようにy1に対しての操作を行ったとしても、それはアドレスA001番地から始まる領域のデータに対する操作をすることになります。

よってx1とy1には同じアドレスが格納されているため、出力結果が同じとなったわけです。

まとめ

今回は参照型について基本的なことを説明してきました。

プログラミングをしていて、
「この変数には特に操作を行っていないはずなのに、何故かいつの間にかデータが書き換わってしまう」
というようなことがあった場合、参照型変数が影響している場合があったりします。

例えば、
この配列データに様々な手を加えたいけどオリジナルのデータは残しておきたいので、
とりあえず違う変数にコピーしてコピー先の変数を操作しようとか考えていると、参照値が同じでオリジナルのデータも変わってしまうなど。

色々と考えながらプログラミングするといいでしょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

おすすめスクール

全国30校舎で展開されるヒューマンアカデミーのWeb講座は修了者数4万人超、講師とカリキュラムの満足度がどちらも9割を超えています。就職や転職に必要なレベルの実務スキルを身に付けられます。

WebCampは、一ヶ月の短期集中でWebデザイン、プログラミングスキルを習得するスクールです。学習効果の高い反転授業(自主学習でインプット、講義でアウトプット)を採用し、年間1000名を輩出しています。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

イチ押しランキング

1リナックスアカデミー

リナックスアカデミー

2システムアーキテクチュアナレッジ

システムアーキテクチュアナレッジ

3WEB塾

WEB塾
ページ上部へ戻る