class Static{
public int a = 20;
static int b = 0;
}
public class Main{
public static void main(String[] args) {
int a;
a = 10;
Static.b = a;
Static st = new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
System.out.print(st.a);
}
}
x++)의 출력 값/증가 타이밍 파악class Static{
public int a = 20; // 인스턴스 필드
static int b = 0; // 클래스(static) 필드
}
a: 객체마다 별도 보유 (인스턴스마다 값 독립)b: 클래스가 하나만 보유 (모든 인스턴스가 공유)int a = 10;
Static.b = a; // b = 10
Static st = new Static(); // st.a == 20
Static.b는 클래스 전체에서 공유되는 값 → 10으로 설정st의 a는 20 (기본값 유지)System.out.println(Static.b++); // 출력 후 증가
b는 11이 됨st.b도 같은 static 변수 참조 → 11 출력| 순서 | 코드 | 상태/계산 | 출력 |
|---|---|---|---|
| 1 | a = 10; Static.b = a; | b = 10 | |
| 2 | System.out.println(Static.b++); | 출력 시점 값 10 → 그 후 b=11 | 10 |
| 3 | System.out.println(st.b); | 같은 static b 참조 → 11 | 11 |
| 4 | System.out.println(a); | 지역변수 a = 10 | 10 |
| 5 | System.out.print(st.a); | 인스턴스 필드 a = 20 | 20 |
10
11
10
20
이 문제에서 꼭 알아야 할 개념:
static 필드는 클래스 전체에서 하나만 존재, 인스턴스로 접근해도 동일한 값을 본다.x++(후위증가)은 현재 값을 먼저 사용하고, 그 다음에 증가한다.st.a는 객체마다 별도로 유지되므로 20이 출력된다.