こんにちは、しょうぞうです。
先日、業務内で参照渡しを使ったコードがあって混乱したのでアウトプットがてら値渡し・参照渡し・Javaの参照の値渡しの違いについて復習したいと思います。
値型とは
boolean | 1bit |
---|---|
byte | 8bit |
char | 16bit |
short | 16bit |
int | 32bit |
float | 32bit |
long | 64bit |
double | 64bit |
値型の特徴は、全て変数のサイズが決まっていて、それ以上のサイズを格納することができません。
参照型とは
値型以外のもので、値そのものを保持するのではなく、値が置いてある場所を保持するものです。
有名なところだとString、[]の配列型、クラス型、インタフェース型などが挙げられます。
値渡しと参照渡しの違い
値渡しと参照渡しの違いは、渡した値に変化があるかどうかが重要です。
値渡しのサンプルプログラムが以下のものです。
サンプルプログラムでは、
int型に10を格納
↓
calAメソッドで10を足す。
という流れです。
変数宣言したnumの値がメソッドを通した後に何も変化していないということがわかります。
値渡しでは、変数に格納している値のみを渡して、宣言した変数の内容は書き換わらないということになります。
一方参照渡しのサンプルプログラムでは、
変数で宣言したarrayがtestメソッドによってHelloに書き換えられていて、その後のmainメソッド内でのarray[0]もHelloに書き換わっていることがわかります。
つまり参照渡しだと、変数宣言した値も書き換わるということです。
Javaにおける参照渡しとは
通常の参照渡しは、宣言した変数の内容も書き換えるものです。
Javaの場合は、参照渡しではなく参照の値渡しができます。
サンプルプログラムは以下のものです。
今までの値渡しと参照渡しとの違いは、testメソッド内で初期化を行なっています。
この瞬間参照しているアドレスは、新たに初期化したarrayを参照しています。
一方、main側の参照は当初のものなので何も変更が加わっていません。
元の変数と引数とで参照するアドレスが変わったことになります。
これがJavaにおける参照渡しです。
まとめ
今回のアウトプットで値渡しと参照渡しの違い、Javaにおける参照の値渡しの理解が深まりました。
今後もこのように、業務内で詰まったところをどんどん書いていきます!
継続できるように!
コメント