[자바] 이 현상을 설명할 수 있을까요?

자바 능력을 시험해 봐.
아래 코드를 보십시오.
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.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}]

총결산


국부 변수를 대입한 참조 목표에 대해 데이터 조작을 할 때 참조 목표에 반영한다.

좋은 웹페이지 즐겨찾기