우선 코드가 있습니다:
public class Demo{ public static void main(String []args){ int i=12; i=i++; System.out.println(i); } }
이 코드가 무엇인지 상상해 보세요. 대부분의 학생들은 13이라는 답을 알겠지만, 아래 그림과 같이 그렇지 않습니다.
위 그림에서 나는 먼저 실행해 보면 대부분의 사람들이 추측한 것처럼 i가 13으로 출력되지 않는데 이 자동 증가 연산을 수행하지 않는 것 같습니다. 그런데 왜 그럴까요?
따라서 바이트코드로 디컴파일하는 작업이 있습니다. javap 명령을 사용하여 디컴파일한 후 어떤 일이 발생하는지 명확하게 알 수 있습니다. JVM 명령에 대해 명확하지 않습니다. 먼저 이 글의 코드에 포함된 JVM 명령어를 대중화하겠습니다. 가상머신이 자동으로 구축하는 기본 구축 방식의 명령어 코드입니다)
1.bipush : 싱글바이트 상수값(-128~127)을 푸시합니다. top of the stack 2.istore: 스택 상단의 int 유형 값을 지정된 지역 변수에 저장
3.iload: 지정된 int 유형 지역 변수를 스택 상단으로 푸시 # 🎜🎜# 4.iinc: 이 명령어는 로컬(local) 변수가 자동 증가 및 감소 작업을 수행하는 데 사용됩니다. 이 명령어의 첫 번째 매개변수는 지역 변수의 개수이고, 두 번째 매개변수는 자동 증가 및 감소 개수입니다. 5.getstatic 지정된 클래스의 정적 도메인을 가져와 해당 값을 클래스의 맨 위에 푸시합니다. 스택(이 위치에 도달한 후에는 이를 호출합니다. 정적 개체 출력 인쇄 작업은 자세히 설명하지 않습니다. 관심 있는 학생은 이 기사 끝에 첨부된 링크에서 이에 대해 자세히 알아볼 수 있습니다.)
#🎜🎜 #기본 지침을 알고 나면 위 그림의 주요 지침을 분석해 보겠습니다.
#🎜 🎜#istore_1 여기서 스택의 최상위 값은 로컬 변수 i에 팝됩니다. 이때 i에는 값 12
#🎜🎜 #위 내용은 Java에서 ''i=i++;'의 연산 결과 및 작동 원리를 깊이 이해합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!