충분히 쌓여가는
5.4 null과 NullPointerException 본문
참조 타입 변수는 아직 번지를 저장하지 않고 있다는 뜻으로 null 값을 가질 수 있다
null로 초기화된 참조 변수는 스택 영역에 생성된다
참조 변수가 null 값을 가지는지 확인하려면 ==, != 연산 수행
String reVar1 = "자바";
String reVar2 = null;
refVar1 == null //false
refVar1 != null //true
reVar2 == null //true
reVar2 != null //false
참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나는 NullPointerException
변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 NullPointerException이 발생함
변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 발생
배열 변수 intArray에 null을 대입한 상태에서 배열 객체의 0 인덱스 항목에 10을 대입하면
intArray가 참조하는 배열 객체가 없으므로 10을 저장할 수 없다
int[] intArray = null;
intArray[0] = 10; //NullPointerException
str 변수에 null을 대입한 상태에서 문자열의 길이를 얻기 위해 length() 메소드를 호출하면 NullPointerException이 발생
str 변수가 참조하는 String 객체가 없으므로 문자열의 길이를 구할 수 없다
String str = null;
System.out.println("총 문자 수: " + str.length());
예제
package ch05.sec04;
public class NullPointerExceptionExample {
public static void main(String[] args) {
int[] intArray = null;
// intArray[0] = 10;
String str = null;
// System.out.println("총 문자 수: " + str.length());
}
}
NullPointerException이 발생하면 예외가 발생된 곳에서 null인 상태의 참조 변수가 사용되고 있음을 인지해야 함
NullPointerException을 해결하려면 참조 변수가 객체를 정확히 참조하도록 번지를 대입해야 함
경우에 따라 참조 타입 변수에 일부러 null을 대입하기도 함
프로그램에서 객체를 사용하려면 해당 객체를 참조하는 변수를 이용해야 하는데, 변수에 null을 대입하면 번지를 잃게 되므로 더 이상 객체를 사용할 수 없게 된다
String hobby = "여행";
hobby = null;
어떤 변수에서도 객체를 참조하지 않으면 해당 객체는 프로그램에서 사용할 수 없는 객체가 된다
즉, 힙 메모리에는 있지만 위치 정보를 모르게 때문에 사용할 수 없게 된다
자바는 이러한 객체를 쓰레기로 취급하고, Garbage Collector을 실행시켜 자동으로 제거한다
자바는 코드를 이용해서 객체를 직접 제거하는 방법을 제공하지 않고, 객체를 제거하는 유일한 방법은 객체의 모든 참조를 없애는 것이다
'이것이 자바다 > 05 참조 타입' 카테고리의 다른 글
5.4 null과 NullPointerException - String 변수에 빈 문자열("") 대입 (0) | 2024.03.31 |
---|---|
5.4 null과 NullPointerException - equals (0) | 2024.03.31 |
5.2 메모리 사용 영역 (0) | 2024.03.31 |
5.1 데이터 타입 분류 (0) | 2024.03.31 |
이것이 자바다 5장 확인 문제 (0) | 2024.02.01 |