>  기사  >  Java  >  왜 `j = j`는 Java에서 0이 되지만 `a = b`는 `b`를 1로 증가시키나요?

왜 `j = j`는 Java에서 0이 되지만 `a = b`는 `b`를 1로 증가시키나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 08:44:01640검색

Why does `j = j  ` result in 0 in Java, but `a = b  ` increments `b` to 1?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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