値渡しと参照の値渡し❌参照渡し❌
メソッドの引数
メソッドの引数には、基本データ型、参照型のどちらも使用できます。
基本データ型
呼び出し元でメソッドの引数に基本データ型を使用した場合、メソッドではその値のコピーを受け取ります。
これを 値渡しといいます。
単純に値のコピーを渡しているだけなので、メソッド内でその値に変更を加えても、呼び出し元には影響しません。
参照型
参照している先をたどると、同じ場所を参照しているため、メソッド内で値へ変更を加えると呼び出し元にも影響を与えます
参考書スッキリわかるJava
配列の例のように、引数としてアドレスを渡すことを参照渡しと言いますが、*参照渡しを行うと呼び出し先で加えた変更が呼び出し元にも影響するようになります。(なお、javaのこの仕組みは、✳️厳密には「参照型の値渡し」と言われるもので、狭義の参照渡しと区別することがあります)。*ここが紛らわしい原因で、赤文字で書いているせいでこの覚え方をしてしまったがついでに書かれていた,✳️参照型の値渡しが正しい。
StringもListも参照型変数です。Javaは参照渡しできない言語です。
- 🔴値型変数の値渡し
- ❌値型変数の参照渡し
- 🔴参照型変数の値渡し
- ❌参照型変数の参照渡し
Javaができるのは 1. と 3. だけです。
インスタンスの引数
メソッドにインスタンスを引数で渡した場合、呼び出し先のメソッドで引数のインスタンスを変更すると呼び出し元のインスタンスも変更されます。その為、例result()メソッド内で引数の例Calcインスタンスに新しい計算式,答えを設定すると、サーブレットクラスの例Calcインスタンスにも新しい計算式,答えが設定されます。この仕組みを*参照型値渡し*と言います。
例x,y,opeだと値渡しをしてしまっていた、これでは、値が描き変わって別のアドレスに保存されてしまっていた/ここは参照型値渡しをして、アドレスを書き換える。