728x90
null
참조 타입 변수는 아직 번지를 저장하고 있지 않다는 뜻으로 null 값을 가질 수 있다. 초기값으로 사용할 수 있어 null로 초기화된 참조 변수는 스택 영역에 생성된다.
String val1 = "Java";
String val2 = null;
변수가 null 값을 가지는지 확인하려면 ==, != 연산을 수행할 수 있다.
val1 == null // false
var1 != null // true
NullPointerException
자바는 프로그램 실행 도중 발생하는 오류를 예외(Exception)라고 부르며, 참조 변수를 사용하며 가장 많이 발생하는 예외 중 하나는 NullPointerException이다. 변수가 null인 상태에서 객체의 데이터나 메소드를 사용할 때 예외가 발생한다.
int[] intArray = null;
intArray[0] = 10; // nullPointerException
intArray는 배열 객체가 없으므로 10을 저장할 수 없어 nullPointerException 예외가 발생한다.
예외가 발생된 곳에서 null인 상태의 참조 변수가 사용되고 있음을 알고, 참조 변수가 객체를 정확히 참조하도록 번지를 대입해야한다.
String val = "자바";
val = null;
참조 타입 변수에 일부러 null을 대입 할 수도 있다. 변수에 null을 대입하면 번지를 잃어 객체를 사용할 수 없다.
어떤 변수에서도 객체를 참조하지 않으면 해당 객체는 프로그램에서 사용할 수 없는 객체이다. 힙 메모리에는 있지만, 위치 정보를 모르기 때문에 사용할 수 없다. 자바는 이런 객체를 쓰레기로 취급하고, 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 제거한다.
예제 코드
public static void main(String[] args) {
String hobby = "여행";
hobby = null;
System.out.println("hobby = " + hobby); // null
String kind1 = "자동차";
String kind2 = kind1;
kind1 = null;
System.out.println("kind1 = " + kind1); // null
System.out.println("kind2 = " + kind2); // 자동차
}
kind1 변수에 null을 대입해도 "자동차"에 해당하는 String 객체가 쓰레기가 되지는 않는다. kind2 변수는 여전히 "자동차"를 참조하기 때문이다.
728x90
'IT > Java' 카테고리의 다른 글
[Java] 배열(Array) (0) | 2024.02.27 |
---|---|
[Java] 문자열 .equals() / .charAt() / .length() / .replace() / .substring() / .indexOf() / .contains() / .split() (0) | 2024.02.26 |
[Java] 참조 타입 변수 ==, != 연산 (0) | 2024.02.26 |
[Java] 참조 타입 (0) | 2024.02.26 |
[Java] break / continue (0) | 2024.02.23 |