[Java] 증감 연산자

개요

증감 연산자는 변수의 값을 1씩 증가시키거나 감소시키는 연산자입니다. 변수 앞 뒤에 ++ –를 작성하여 사용할 수 있습니다.

  • 증가 연산자 (Increment Operator): ++
  • 감소 연산자 (Decrement Operator): --
  • 전위 연산자 (Prefix): 연산자가 변수 앞에 위치. 예: ++a
  • 후위 연산자 (Postfix): 연산자가 변수 뒤에 위치. 예: a++

전위 연산자와 후위 연산자의 차이

class Main {
  public static void main(String[] args) {
    int a = 0;

    System.out.println(a++); // 출력: 0
    System.out.println(++a); // 출력: 2
  }
}
  • 전위 연산자: 연산자가 변수 앞에 위치하며, 해당 변수의 값을 증가(또는 감소)시키고 그 값을 반환합니다.
    • 예: ++a는 변수 a의 값을 1 증가시키고, 증가된 값을 반환합니다.
  • 후위 연산자: 연산자가 변수 뒤에 위치하며, 해당 변수의 값을 반환한 후 증가(또는 감소)시킵니다.
    • 예: a++는 변수 a의 현재 값을 반환하고, 그 후에 변수 a의 값을 1 증가시킵니다.

바이트코드로 변환

// access flags 0x9
public static main([Ljava/lang/String;)V throws java/lang/InterruptedException 
 L0
  LINENUMBER 5 L0
  ICONST_0
  ISTORE 1
 L1
  LINENUMBER 7 L1
  GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
  ILOAD 1
  IINC 1 1
  INVOKEVIRTUAL java/io/PrintStream.println (I)V
 L2
  LINENUMBER 8 L2
  GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
  IINC 1 1
  ILOAD 1
  INVOKEVIRTUAL java/io/PrintStream.println (I)V

작성한 코드를 바이트코드로 변환한 내용 중 일부입니다.

  • L0: int a = 0;
    • ICONST_0: 상수 0을 스택에 넣습니다.
    • ISTORE 1: 상수 0을 로컬 변수 a에 저장합니다.
  • L1: System.out.println(a++);
    • ILOAD 1: 로컬 변수 a의 값을 스택에 넣습니다.
    • IINC 1 1: 로컬 변수 a를 1 증가시킵니다. 이는 후위 증가 연산 a++에 해당합니다.
    • INVOKEVIRTUAL java/io/PrintStream.println (I)V: println 메서드를 호출하여 증가하기 전 a의 값을 출력합니다.
  • L2: System.out.println(++a);
    • IINC 1 1: 로컬 변수 a를 다시 1 증가시킵니다. 이는 전위 증가 연산 ++a에 해당합니다.
    • ILOAD 1: 증가된 값 a를 스택에 넣습니다.
    • INVOKEVIRTUAL java/io/PrintStream.println (I)V: println 메서드를 호출하여 증가된 a의 값을 출력합니다.

링크 모음

Leave a Comment