>Java >java지도 시간 >Java에서 ''i=i++;'의 연산 결과 및 작동 원리를 깊이 이해합니다.

Java에서 ''i=i++;'의 연산 결과 및 작동 원리를 깊이 이해합니다.

php是最好的语言
php是最好的语言원래의
2018-08-02 14:41:151783검색

java의 "i=i++;"에 대한 간략한 설명

우선 코드가 있습니다:

    public class Demo{
        public static void main(String []args){
            int i=12;
            i=i++;
            System.out.println(i);
        }
    }

이 코드가 무엇인지 상상해 보세요. 대부분의 학생들은 13이라는 답을 알겠지만, 아래 그림과 같이 그렇지 않습니다.

Java에서 i=i++;의 연산 결과 및 작동 원리를 깊이 이해합니다.

위 그림에서 나는 먼저 실행해 보면 대부분의 사람들이 추측한 것처럼 i가 13으로 출력되지 않는데 이 자동 증가 연산을 수행하지 않는 것 같습니다. 그런데 왜 그럴까요?

따라서 바이트코드로 디컴파일하는 작업이 있습니다. javap 명령을 사용하여 디컴파일한 후 어떤 일이 발생하는지 명확하게 알 수 있습니다. JVM 명령에 대해 명확하지 않습니다. 먼저 이 글의 코드에 포함된 JVM 명령어를 대중화하겠습니다. 가상머신이 자동으로 구축하는 기본 구축 방식의 명령어 코드입니다)

1.bipush : 싱글바이트 상수값(-128~127)을 푸시합니다. top of the stack 2.istore: 스택 상단의 int 유형 값을 지정된 지역 변수에 저장

3.iload: 지정된 int 유형 지역 변수를 스택 상단으로 푸시 # 🎜🎜# 4.iinc: 이 명령어는 로컬(local) 변수가 자동 증가 및 감소 작업을 수행하는 데 사용됩니다. 이 명령어의 첫 번째 매개변수는 지역 변수의 개수이고, 두 번째 매개변수는 자동 증가 및 감소 개수입니다.

5.getstatic 지정된 클래스의 정적 도메인을 가져와 해당 값을 클래스의 맨 위에 푸시합니다. 스택(이 위치에 도달한 후에는 이를 호출합니다. 정적 개체 출력 인쇄 작업은 자세히 설명하지 않습니다. 관심 있는 학생은 이 기사 끝에 첨부된 링크에서 이에 대해 자세히 알아볼 수 있습니다.)
#🎜🎜 #기본 지침을 알고 나면 위 그림의 주요 지침을 분석해 보겠습니다.


bipush 12 여기서는 12를 스택 맨 위로 밀어넣고 저장합니다. int 값 12

  1. istore_1 여기서 두 번째 값에 12가 표시됩니다(참고: 첫 번째 지역 변수는 이것이어야 합니다). 지역 변수는 i=12#🎜입니다. 🎜#

  2. iload_1 여기서 두 번째 지역 변수(i)의 값을 스택의 맨 위로 밀어넣는 것입니다. 이때 스택의 맨 위는 12#🎜입니다. 🎜#
  3. iinc 1,1. 당연히 i=i+1, 즉 i++ 이때 i=13
  4. #🎜 🎜#istore_1 여기서 스택의 최상위 값은 로컬 변수 i에 팝됩니다. 이때 i에는 값 12

    #🎜🎜 #
  5. 그래서 최종적으로 인쇄됩니다. , 저는 12살이에요.

    CSDN 형제가 정리한 JVM 명령어 모음. 쿼리와 학습에 매우 편리합니다.
  6. 관련 기사:

  7. i++ 관련 문제# i와 i++의 차이점 🎜🎜#
JAVA 튜토리얼 매뉴얼

위 내용은 Java에서 ''i=i++;'의 연산 결과 및 작동 원리를 깊이 이해합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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