Java의 후위 증가 연산자
Java 후위 증가 연산자( )는 고유한 동작으로 인해 종종 프로그래머에게 혼란을 야기합니다. 이 기사에서는 사후 증가 연산자의 복잡성을 살펴보고 Joshua Bloch의 "Java Puzzlers"의 다음 코드 조각이 예상치 못한 결과를 생성하는 이유를 설명합니다.
<code class="java">public class Test22 { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); // prints 0 int a = 0, b = 0; a = b++; System.out.println(a); System.out.println(b); // prints 1 } }</code>
저자의 설명을 바탕으로 다음 표현식은 j = j는 다음과 유사하게 동작해야 합니다.
<code class="java">temp = j; j = j + 1; j = temp;</code>
이 논리는 j의 값이 증가한 다음 j에 할당되어 표현식 a = b와 유사한 증가가 발생해야 함을 의미합니다. 그러나 후자의 경우 사후 증가 연산자가 다른 맥락에서 사용되어 다른 결과가 발생합니다.
a=b의 올바른 평가는 실제로 다음과 같습니다.
<code class="java">temp = b; b = b + 1; // increment a = temp; // then assign</code>
이는 후위 증분 표현식의 경우 "값 1이 변수 값에 추가되고 합계가 변수에 다시 저장된다"고 명시한 JLS(Java 언어 사양)와 일치합니다. 따라서 a = b는 b를 1로 증가시키기 전에 b의 원래 값(0)을 a에 할당합니다.
j = j 표현식으로 돌아가면 이제 사후 증가 연산자로 인해 j가 평가되는 것을 볼 수 있습니다. 작성자의 설명에 추가된 임시 변수는 실제로 사후 증분 평가에 관여하지 않습니다.
사후 증분 연산자의 실제 동작을 이해하면 다음과 같은 문제를 피할 수 있습니다. 혼란을 방지하고 정확한 코드 실행을 보장합니다.
위 내용은 왜 `j = j`는 Java에서 0이 되지만 `a = b`는 `b`를 1로 증가시키나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!