【Java】この事象を説明できますかい
あなたのJava力を試してみてください。
以下のコードを見て下さい。
arrayListのすべての値に"D"を代入しようとしています。
ExtentionForSample.java
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("A");
arrayList.add("B");
arrayList.add("C");
for(String str : arrayList) {
str = "D";
System.out.println(str);
}
System.out.println(arrayList);
結果
D
D
D
[A, B, C]
なぜこの結果になったのかを説明できるか。
答え
ローカル変数の参照先を変更していただけだから。。。
説明しよう
ローカル変数に新しい参照先を代入しているだけだった。
参照先の"A"に影響はない
修正する
ExtentionForSample.java
//中略
for(int i=0; i < arrayList.size(); i++) {
arrayList.set(i, "D");
}
System.out.println(arrayList);
ArrayList.set(int index, E element)を使用する
結果
[D, D, D]
ちなみに
ExtentionForSample.java
Map mapA = new HashMap<String,String>(){{put("1", "A");}};
Map mapB = new HashMap<String,String>(){{put("1", "B");}};
Map mapC = new HashMap<String,String>(){{put("1", "C");}};
arrayListMap.add(mapA);
arrayListMap.add(mapB);
arrayListMap.add(mapC);
for(Map map:arrayListMap) {
map.put("2", "D");
}
System.out.println(arrayListMap);
結果
[{1=A, 2=D}, {1=B, 2=D}, {1=C, 2=D}]
まとめ
ローカル変数に代入した参照先に対して、データ操作すると参照先に反映される。
Author And Source
この問題について(【Java】この事象を説明できますかい), 我々は、より多くの情報をここで見つけました https://qiita.com/j-work/items/107233c419bbbf05cd72著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .