0
0

More than 3 years have passed since last update.

参照+値渡し+String+オブジェクトの場合+List

Last updated at Posted at 2021-03-21

Stringクラスのオブジェクトの場合

Stringクラスのオブジェクトをメソッドに渡した場合、メソッド側の引数には同じオブジェクトの位置が渡されるのは配列と同じですが、文字列変数に新しい文字列を代入するとまったく別の場所にオブジェクトが新しく作成され、その新しい場所の位置がメソッド内の変数に代入されます。その為、元の場所には元の文字列が格納されたままなのでメソッド呼び出し元の文字列には何も影響を与えません。

String.java

    public static void main(String[] args) {
        String str = "abc";
        test(str);//先にここのtext()が実行される
        System.out.println(str);
    }
    private static void test(String str) {
        str = "def";
        System.out.println(str);
    }
実行
def
abc


List

参照型の変数の場合は、final修飾子をつけても値の変更が可能になってしまいます。
このように参照型の変数を引数に使う場合は、呼び出し元の値が変わるため注意してください。

List.java

 public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list);

        finalSample(list);
        System.out.println(list);
    }

    public static void finalSample(final List<String> list) {
// public static void finalSample(List<String> list)
        list.set(0, "A");
        list.set(1, "B");
        list.set(2, "C");
    }
実行
[a, b, c]
[A, B, C]

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0