>  기사  >  Java  >  왜 `j = j ` 결과가 `j`가 Java에서 0으로 유지됩니까?

왜 `j = j ` 결과가 `j`가 Java에서 0으로 유지됩니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 21:35:03430검색

Why Does `j = j  ` Result in `j` Staying at 0 in 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); // prints 0
        System.out.println(b); // prints 1
    }
}</code>

포스트 증가에 대한 혼란

혼란스러운 부분은 j = j의 동작으로, 결과적으로 j는 0으로 유지됩니다. 저자에 따르면 이 표현식은 다음과 유사합니다. :

<code class="java">temp = j;
j = j + 1;
j = temp;</code>

그러나 a = b 의 경우 b는 실제로 1이 되어 일관성이 없어 보입니다.

차이 이해

이러한 혼란을 해결하려면 후위 증가 연산자( )에 대한 규칙을 이해해야 합니다.

lhs = rhs++;

동일함:

temp = rhs;
rhs = rhs + 1;
lhs = temp;

규칙 적용

이 규칙을 a = b에 적용하면 다음과 같습니다.

temp = b;
b = b + 1;
a = temp;

따라서 a는 b의 원래 값(0)을 얻고 b는 1로 증가됩니다.

j = j의 경우

마찬가지로 j = j에 규칙을 적용하면 다음과 같은 결과가 나옵니다.

temp = j;
j = j + 1;
j = temp;

temp가 원본과 동일하므로 j의 값(0)이 있으면 j는 1로 증가하지만 즉시 원래 값(0)으로 덮어쓰기되어 j는 0으로 유지됩니다.

결론

후위 증가 연산자의 동작을 이해하는 열쇠는 lhs = rhs가 2단계 프로세스라는 규칙을 기억하는 것입니다. 먼저 rhs의 현재 값이 temp에 할당된 다음 rhs가 증가되고 마지막으로 temp가 할당됩니다. LHS로.

위 내용은 왜 `j = j ` 결과가 `j`가 Java에서 0으로 유지됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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