문제
다음 JAVA 프로그램이 실행되었을 때의 결과는?
① 1 ② 2 ③ 3 ④ 4
정답
3번
해설
정답: 3. main 안의 지역 변수 x=2가 정적 변수 x(=1)를 가린다. 블록 안에서 y=x(=2), x=y+1(=3)이 되고, 이 x는 같은 메서드 스코프의 지역 변수라 블록을 벗어나도 3을 유지한다. 따라서 System.out.println(x)는 3을 출력한다.
오답 풀이
- 1번: static x(=1)는 지역 변수 x에 가려져 출력되지 않는다.
- 2번: 블록에서 x가 y+1=3으로 바뀌므로 2가 아니다.
- 3번: 지역 변수 x가 3이 되어 출력되므로 정답이다.
- 4번: x는 한 번만 1 증가해 3이며 4가 아니다.
보충 개념 Java에서 내부 블록은 바깥 메서드의 지역 변수를 그대로 공유하며, 같은 이름의 지역 변수는 클래스의 static 필드를 가린다(shadowing).