Oh! Yummy!!

プログラミングとか投資のこととかご飯のこととかを書きます。

JavaのList型でオブジェクトの参照渡しを回避する方法(値渡しをする方法)

Listオブジェクトを参照渡して記述していた例

久々にJavaのコードを書いてみた。 こんな感じのコードでListのコピーして値を渡して、その後値を消したら渡した先でもデータが消えてた。

import java.util.*
public class クラス名{
    public static void main(String[] args) {
        List<String> str1 = new ArrayList<String>();
        List<String> str2 = new ArrayList<String>();

        str1.add("a");
        str1.add("b");
        str2 = str1;
        str1.clear();
        }
}

いわゆる、参照渡しっていうやつですね。 まぁ具体的には、ループ処理の中でListオブジェクトをただの入れ物として使って次の処理のときには値をclearしようと思ったら今回の現象に遭遇。

で、どうするかというとインスタンス生成時のコンストラクタにオブジェクトを渡してあげればよいみたい。 以下参考

import java.util.*
public class クラス名{
    public static void main(String[] args) {
        List<String> str1 = new ArrayList<String>();

        str1.add("a");
        str1.add("b");

        List<String> str2 = new ArrayList<String>(str1);

        str1.clear();
        }
}

これで参照渡しではなくなったので、安心してオブジェクトの値をclear出来る。