개요
증감 연산자는 변수의 값을 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
의 값을 출력합니다.