다음 코드를 실행 한 결과는 무엇입니까?
패키지 com.test; public class Inc {public static void main (String [] args) {inc = new Inc (); int i = 0; Inc.fermin (I); i = i ++; System.out.println (i); } void fermin (int i) {i ++; }}결과는 다음과 같습니다. 0
C/C ++에서 위의 유사한 코드를 실행 한 결과는 다음과 같습니다.
Java는 중간 캐시 변수 메커니즘을 사용하기 때문입니다.
i = i ++; 동등한 :
온도 = i; (i 동등한 부호의 오른쪽에)
i = i+1; (나는 동등한 부호의 오른쪽에)
I = 온도; (I 동일한 부호의 왼쪽에)
그리고 i = ++ i; 다음과 같습니다.
i = i+1;
온도 = i;
I = 온도;
상해:
JVM에는 두 가지 저장 영역이 있으며, 하나는 임시 저장 영역 (스택, 아래 스택이라고 불리는 스택)이고 다른 하나는 가변 영역입니다.
JVM은 다음과 같이이 진술을 실행합니다.
1 단계 JVM I의 값 (0)을 임시 변수 영역 (Temp = 0)으로 복사하십시오.
2 단계 변수 영역 i의 값을 1에 추가하고 i의 값은 1입니다.
3 단계 임시 변수 영역 (TEMP)의 값을 반환합니다. 이 값은 0이고 수정되지 않았습니다.
4 단계 반환 값은 변수 영역에서 i에 할당되고 i의 값은 0으로 재설정됩니다.
C/C ++로 I를 절약 할 수있는 다른 임시 변수 또는 임시 공간은 없습니다. 모든 작업은 하나의 메모리 공간에서 완료되므로 C/C ++에서 1입니다.
Java의 자체 증가 문제에 대한 위의 소개는 내가 공유 한 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.