>Java >java지도 시간 >Java For-Each 루프에서 문자를 수정해도 원래 배열이 변경되지 않는 이유는 무엇입니까?

Java For-Each 루프에서 문자를 수정해도 원래 배열이 변경되지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-21 11:54:14844검색

Why Doesn't Modifying a Character in a Java For-Each Loop Change the Original Array?

반복 딜레마 살펴보기: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.