반복 딜레마 살펴보기: Foreach 루프 할당이 기본 데이터를 변경하지 않는 이유
내부 요소를 직접 수정하는 직관적인 매력에도 불구하고 foreach 루프(이 Java에서 볼 수 있음) 조각:
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(new String(array)); //Unexpected result: "boss"
코드는 예상했던 "베이스" 대신 놀랍게도 "보스"를 생성합니다.
복사본 공개
핵심 이 역설을 이해하는 것은 반복 변수 "c"의 성격에 있습니다. 대중적인 믿음과는 달리 "c"는 현재 배열 요소의 단순한 복사본을 나타냅니다. "c" 수정은 원본 어레이 내용과 아무런 관련이 없습니다.
어레이 수정 설명
어레이를 실제로 변경하려면 명시적인 개입이 필요합니다.
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
여기서 코드는 실제 배열 요소에 액세스하고 수정하여 원하는 내용을 반영하도록 배열이 업데이트됩니다.
JLS 해석 이해
JLS(Java 언어 사양)는 원본 코드를 다음과 동등한 것으로 해석합니다.
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
이 분해는 다음을 강조합니다. "c"는 단지 배열에 영향을 미칠 수 없는 복사본일 뿐입니다.
본질적으로 foreach는 루프는 기본 구조를 방해하지 않고 컬렉션을 반복하는 간소화된 수단을 제공합니다. 배열을 직접 수정하려면 배열 인덱스 및 요소를 사용하여 명시적으로 작업해야 합니다.
위 내용은 Java For-Each 루프에서 문자를 수정해도 원래 배열이 변경되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!