메모리 사용 영역
JVM은 운영체제에서 할당받은 메모리영역 을 다음과 같이 세부 영역으로 구분해서 사용합니다.
프레임 내부에는 로컬 변수 스택이 있는데, 기본타입 변수와 참조 타입 변수가 추가 되거나 제거 된다. 스택 영역에 변수가 생성되는 시점은 초기화가 될때, 즉 최초로 변수에 값이 저장될 때이다. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
char v1= 'A' ===== 1
if(v1 == 'A'){ ====== 2
int v2 = 100;
double = 3.14;
}
boolean v4 = true; ====== 3
int[] scores = {10,20,30};
1,3 은 변수에 할당되어 변수가 값을 가지고 있고
if 안의 변수는 실행될때 스택에 채워지지만 if이 끝나면 소멸된다
scores 는 배열이며 참조 변수이다. 자바에서는 객체로 취급한다.
기본 타입 변수의 ==, != 연산은 변수의 값이 같은지, 아닌지를 조사하지만 참조 타입 변수들 간의 ==, != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아 볼 때 사용된다, 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 ==, != 연산은 결국 번지 값을 비교하는 것이 된다. 동일한 번지 값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미이다. 따라서 동일한 객체를 참조하고 있을경우 == 연산의 결과는 true이고 =! 의 연산의 결과는 false이다.
참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성된다.
자바는 프로그램 실행 도중에 발생하는 오류를 예외(Exception)라고 부른다. 예외는 사용자의 잘못된 입력으로 발생할 수 있고, 프로그래머가 코드를 잘못 작성해서 발생할 수도 있다. 참조변수를 사용하려면 가장 많이 발생하는 예외중 하나로 NullPointerException이 있습니다. 이예외는 참조 타입 변수를 잘못 사용하면 발생한다
참조 변수가 null을 가지고 있을경우, 참조 객체가 없으므로 변수를 통해 객체를 사용할수 없다. 만약 null상테에서 있지도 않은 객체의 데이터나 메소드를 사용하는 코드를 실행하면 발생한다.
int[] intArray = null;
intArray[0] = 10; -> NullPointerException
위 코드에서 intArray는 배열 변수이므로 참조 변수입니다. null로 초기화가 가능합니다. 이상태에서 intArray[0]에 10을 저장하려고 하면 NullPointerException이 발생한다. intArray변수가 참조하는 배열 객체가 없기 때문이다.
String str = null;
System.out.println("총 문자수: " str.length());
String