Foreach 루프의 수수께끼 할당: 기본 데이터에 영향을 주지 않는 이유
아래의 복잡한 코드 조각을 고려하세요.
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(new String(array)); //Why does this print "boss" and not "bass"?
반복 변수 c에 할당된 것처럼 보임에도 불구하고 출력은 예상되는 "베이스" 대신 "보스"로 유지됩니다. 이 수수께끼를 풀기 위해 foreach 루프의 미묘한 차이를 조사합니다.
반복 변수: 단순한 프록시
foreach 루프를 사용하여 컬렉션을 반복할 때 반복 변수(이 경우 c)는 단순히 요소의 복사본을 나타냅니다. 기본적으로 이는 기본 컬렉션에 액세스하는 동안 임시 자리 표시자 역할을 합니다.
자리 표시자 수정과 컬렉션 변경
반복 변수에 대한 할당은 복사본에만 영향을 미칩니다. 그리고 원래 컬렉션이 아닙니다. 이는 다음과 같습니다.
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
c 값이 로컬에서 수정되는 동안 원래 배열은 변경되지 않습니다.
실제 변경을 위한 필수 수정
기본 컬렉션을 실제로 수정하려면 배열 요소에 직접 액세스해야 합니다. 필요함:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
이 코드는 배열의 개별 요소를 명시적으로 변경하여 원하는 "베이스" 출력을 얻습니다.
결론
혼란을 피하고 효과적인 데이터 조작을 보장하려면 foreach 루프에서 반복 변수의 실제 특성을 이해하는 것이 중요합니다. 반복 변수 대신 배열 요소에 할당함으로써 개발자는 의도한 요구 사항에 따라 기본 컬렉션을 자신있게 수정할 수 있습니다.
위 내용은 Foreach 루프의 반복 변수를 수정해도 기본 배열이 변경되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!