Help us understand the problem. What is going on with this article?

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

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

「変数への代入」

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

「基本型変数」への代入

基本型変数とは、「値そのものを保持する変数」のこと。
例えば、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; //変数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

FugitHora812
エンジニアとして働く傍ら、1000冊以上の読書経験を活かし「本が読みたいけど、何を読んだらいいかわからない」「深い教養を身に付けたい」人のための選書ブログ「ふぎと屋」を運営中。
https://fugit812.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away