Javaはすべて値渡しです。
メソッド引数に参照型を渡す処理について、"参照渡し"という表現が使われるため誤解されがちですが、Javaではオブジェクトは"参照渡し"ではなく、"参照のコピー渡し"です。
実際にはインスタンスが格納されたメモリアドレスがコピーされて渡されるため、メソッドの呼び出し元に対して影響を及ぼせる場合と,影響を及ぼせない場合があります。
(影響を及ぼせる例)
メソッド内でオブジェクトに対して「操作」を行う場合
lang
1AtomicReference<Object> ref = new AtomicReference<Object>("こんにちは");
2test(ref);
3System.out.println(ref.get()); //"さようなら"と表示される
4
5private void test(AtomicReference<Object> ref) { ref.set("さようなら"); }
6
(影響を及ぼせない例)
メソッド内でオブジェクトを新しく生成したオブジェクトに置き換える場合
lang
1Object o = "こんにちは";
2test(o);
3System.out.println(o);//"こんにちは"と表示される
4
5private void test(Object o) { o = "さようなら"; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。