どーも、ふぎとです。
今回も自身の復習を兼ねての投稿です。
##「変数への代入」
「変数への代入」とは、変数に何かしらの値をセット
すること。
##「基本型変数」への代入
基本型変数とは、「値そのものを保持する変数」のこと。
例えば、int型の変数numberに3を代入すると、numberが
保持する値は3になる。
int number = 3; //整数3をnumberに代入
##「参照型変数」への代入
参照型変数とは、「コンピュータのメモリ上に確保された
ある領域(オブジェクト)への参照(オブジェクトの場所
を示す位置情報)を保持する変数」のこと。
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; //変数iに30を再代入
//StringBuilder型変数sb1(参照型変数)を宣言
StringBuilder sb1 = new StringBuilder();
sb1.append("Qiita"); //sb1が参照するオブジェクトに文字列"Qiita"を追加
StringBuilder sb2 = sb1; //sb2にsb1の値を代入
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