[자바] 이 현상을 설명할 수 있을까요?
아래 코드를 보십시오.
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.컬렉션 사용
결과
[D, D, D]
겸사겸사 말씀드리다
ExtentionForSample.javaMap 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}]
총결산
국부 변수를 대입한 참조 목표에 대해 데이터 조작을 할 때 참조 목표에 반영한다.
Reference
이 문제에 관하여([자바] 이 현상을 설명할 수 있을까요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/j-work/items/107233c419bbbf05cd72
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
//中略
for(int i=0; i < arrayList.size(); i++) {
arrayList.set(i, "D");
}
System.out.println(arrayList);
[D, D, D]
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}]
Reference
이 문제에 관하여([자바] 이 현상을 설명할 수 있을까요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/j-work/items/107233c419bbbf05cd72텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)