class InitProblem{

}

public class Test{
	public static void main(String[] args) {

		int a;				//int a = 0;
		InitProblem b;		//InitProblem b = null;

		for(int i=0; i<1; i++) {
			a = 3;
			b = new InitProblem();
			System.out.println(a);
			System.out.println(b);
		}

//		System.out.println(a);	//초기화 문제로 에러
//		System.out.println(b);	//초기화 문제로 에러

		if(true) {
			a = 3;
			b = new InitProblem();
		}

		System.out.println(a);	//문제 없음
		System.out.println(b);	//문제 없음

	}
}

메인함수에서 변수 두 개를 선언만 해주고 for문안에서 초기화를 하고 for이 끝나고 두 변수를 사용하려 했더니 초기화가 안되었다는 에러가 나와서 생각을 많이 해봤습니다. 그러다 지역변수는 초기화가 될 때 스택 메모리에 생성이 되니깐 for문도 스택메모리에서 메서드처럼 하나의 스택프레임을 가지고 for문이 끝나면 사라지는 건가? 라 생각했습니다. 맞는걸까요??

(밑에 제가 생각했던 답에 대한 그림을 그려보았습니다.)

추가)) 그러다가 제 생각이 맞다면 if문 등 다른 제어문(중괄호를 가지고 있는 것들)들도 이놈들 만의 스택 프레임을 갖는 건가? 하는 생각이 들어 if문으로 똑같은 작업을 해봤는데,, if문은 문제가 없더라고요......ㅜㅜㅜ

제가 생각을 잘못된 방향으로 하고 있는 건가요? ㅜㅜ

위에는 내가 Okky에 올린 질문인데 그냥 개 병신같은 질문 간단하게 for, if, switch, while 등 조건문을 가진 녀석들은 조건문이 true일 때만 실행되기 때문에 컴파일러 입장에서는 초기화가 안될 수도 있는 문제 때문에 컴파일 오류를 발생시킴! 하지만 위에 if문은 조건식이 TRUE로 명백히 실행되는 걸 컴파일러도 알기 때문에 괜춘!!