LoginSignup
0

More than 3 years have passed since last update.

【Java】基本型変数の代入と参照型変数の代入の違い

Last updated at Posted at 2020-03-26

どーも、ふぎとです。
今回も自身の復習を兼ねての投稿です。

「変数への代入」

「変数への代入」とは、変数に何かしらの値をセット
すること。

「基本型変数」への代入

基本型変数とは、「値そのものを保持する変数」のこと。
例えば、int型の変数numberに3を代入すると、numberが
保持する値は3になる。


int number = 3; //整数3numberに代入

「参照型変数」への代入

参照型変数とは、「コンピュータのメモリ上に確保された
ある領域(オブジェクト)への参照(オブジェクトの場所
を示す位置情報)を保持する変数」のこと。


String word = "Qiita"; //変数wordに文字列"Qiita"を代入?

上の例では、String型の変数wordに文字列"Qiita"が代入され
ているように見える。言い換えると、変数wordが保持する値
は文字列"Qiita"であるように見える。
しかし実際には、変数wordが保持している値は「String型オブ
ジェクトへの参照」である。つまり、「コンピュータのメモリ
上に確保された、文字列"Qiita"を格納する為の領域の位置情報」
を変数wordは持つのである。

この、変数が持つ値の性質の違いは、「他の変数にその変数を
代入する」ときに目に見えて現れてくる。

「他の変数にその変数を代入する」

int i = 21;
int k = i ; //int型変数kに変数iの値を代入
int i = 30; //変数i30を再代入

//StringBuilder型変数sb1(参照型変数)を宣言
StringBuilder sb1 = new StringBuilder();
sb1.append("Qiita"); //sb1が参照するオブジェクトに文字列"Qiita"を追加
StringBuilder sb2 = sb1; //sb2sb1の値を代入
sb1.append("★"); //sb1が参照するオブジェクトに文字列"★"を追加

System.out.println(i);   //30」を出力
System.out.println(k);   //21」を出力
System.out.println(sb1); //Qiita★」を出力
System.out.println(sb2) ;//Qiita★」を出力

基本型変数は、「値そのものを保持する変数」だ。そのため、
上の例において、int型変数kにiを代入したとき、その時点で
iが保持している値(21)が代入され、保持されることになる。
したがって、iに30を再代入してもkの値は変化せず21のまま
となる。
一方、参照型変数は「オブジェクトへの参照を保持する変数」
だ。よって、sb2にsb1を代入すると、「sb1が参照しているオ
ブジェクトへの参照」が値として代入されることになる。つま
り、「sb1が保持しているオブジェクトの位置情報」を、sb2も
また保持することになる。そのため、sb1が参照するオブジェク
トに文字列"★"を追加してから出力したとき、同じオブジェクト
を参照しているsb2にも変化があらわれるのだ。

まとめ

・基本型変数は「値そのもの」を値として保持する
・参照型変数は「オブジェクトへの参照」を値として保持する
・2種類の変数の性質の違いは「他の変数にその変数(の値)
 を代入したとき」に顕在化する

...
では今回はこの辺で。ふぎとでした。

(P.S.)記事の内容への指摘などあれば
   遠慮なくお知らせくださいm(__)m

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0