
public class SwitchDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String res = howMany(1);
System.out.println(res);
}
public static String howMany(int n) {
if (n == 1)
return "1개";
else if (n == 2)
return "2개";
else
return null;
}
}
1.문법 검사
2.타입 검사
3.바이트 코드 생성
4.SwitchDemo2.class 파일 생성
1.클래스 로딩
클래스 정보가 Method Area(메서드 영역)에 올라감.
2.main() 호출 → Stack
main 메서드가 Stack에 push 됨
Stack 안에는: 매개변수 args, 지역변수 res
```public static void main(String[] args) {```
3.howMany(1) 호출
String res = howMany(1);
stack안에 howmany 추가됨
4.howMany 내부 실행
return "1개";
n은 howMany의 Stack Frame에 저장
"1개"는 문자열 리터럴
문자열 리터럴은 Heap의 String Constant Pool에 저장
Heap
└── String Pool
└── "1개"
6.res
String res
res는 Stack에 존재하는 참조변수
실제 문자열 객체는 Heap에 있음
7.System.out.println(res);
println 호출
내부적으로 또 다른 Stack Frame 생성
출력 후 제거
8.main 종료
main Stack Frame pop
Stack 비어짐
프로그램 종료
Method Area
└── SwitchDemo2 클래스 정보
└── main()
└── howMany()
Heap
└── String Pool
└── "1개"
Stack
└── main frame
└── res (참조값)
메서드는 Stack
객체는 Heap
클래스 정보는 Method Area
참조변수는 Stack