知ることはたのしい

"車輪の再発明"は時間がもったいないと思うから"車輪の設計図"を置いて学習の効率化に役立ちたい。そしてもっと素晴らしいものを開発してくれないかな。

今更気づいたJavaでの引数の渡し方で勘違いしていたこと(まとめ)

Javaでプログラムを書いてて意図しない処理が発生した原因が

メソッドの引数の渡し方だったので備忘録を兼ねてまとめておきます。

 

型の種類

・プリミティブ型

 boolean, byte, short, int, long, float, double, char

・参照型

 クラス型, インターフェース型, 配列型

 

引数の渡され方

・プリミティブ型:値渡し

・参照型:参照の値渡し(共有渡し)

 

違いは?

・値渡し

値渡しというのは、変数が持っている値(中身)をコピーして扱います。

そのためメソッド内で書き換えても元の変数には影響を及ぼしません。

f:id:lenia23:20160706002001j:plain

 

・参照渡し

参照渡しは変数の持っている値(中身)ではなく、変数が存在する場所、アドレスを引数に渡します。そのため、メソッド内で変数の値を書き換えた場合、渡されたアドレスの場所にある値を書き換えるので元の値に影響を与えます。

f:id:lenia23:20160706002018j:plain

 

・参照の値渡し

参照の値渡しは参照渡しと混同しがちですが、一緒ではありません。

違うのは変数が持っている値(中身)がアドレスだというところです。中身をコピーして引数として渡す(値渡し)のですが、渡されるのはアドレス(参照)なので、参照の値渡し、というわけです。

f:id:lenia23:20160706002210j:plain