[Java] Pouvez-vous expliquer ce phénomène?

Essayez votre puissance Java.

Voir le code ci-dessous. J'essaye d'assigner «D» à toutes les valeurs dans arrayList.

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);

résultat

D
D
D
[A, B, C]

Pouvez-vous expliquer pourquoi c'était le résultat?

répondre

Je viens de changer la destination de référence de la variable locale. .. ..

Expliquons

ローカル変数代入.png

J'attribuais juste une nouvelle référence à une variable locale. N'affecte pas le "A" référencé

Réparer

ExtentionForSample.java


//Omission
for(int i=0; i < arrayList.size(); i++) {
	arrayList.set(i, "D");
}
System.out.println(arrayList);

Utiliser ArrayList.set (index int, élément E)

résultat

[D, D, D]

Au fait

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);

résultat

[{1=A, 2=D}, {1=B, 2=D}, {1=C, 2=D}]

ローカル変数代入_map.png

Résumé

Lorsque les données sont manipulées pour la destination de référence affectée à la variable locale, elles sont reflétées dans la destination de référence.

Recommended Posts

[Java] Pouvez-vous expliquer ce phénomène?
Pouvez-vous le faire? Java EE
[Bonne nouvelle] Vous pouvez toujours utiliser Java 8 !!
[JavaScript] Programmeurs Java! Si c'est le cas, la fermeture JavaScript est super facile à comprendre!
Expliquer les expressions lambda Java 8
C'est OK WebSocket: Serveur = Java, Client = Java, JavaScript
[# 3 Java] Lisez ceci si vous voulez étudier Java! ~ Sélectionné avec soin ~
[Contrôle de compréhension Ruby] Pouvez-vous expliquer ce qui se passe? && et et
L'histoire de Java dans ce monde
Java thread sans danger pour vous