인프런 커뮤니티 질문&답변

명석님의 프로필 이미지
명석

작성한 질문수

김영한의 실전 자바 - 중급 2편

다형성을 통한 중복 해결 시도

캐스팅 관련 질문 있습니다.

작성

·

272

·

수정됨

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

package generic.ex1;

public class BoxMain2 {
    public static void main(String[] args) {
        ObjectBox integerBox = new ObjectBox();
integerBox.set(10);
        Integer integer = (Integer) integerBox.get(); //Object -> Integer 캐스팅
        System.out.println("integer = " + integer);

    }
}

위 코드에서 integerBox.set(10);을 빼고 실행해봤는데 integerBox.get()은 null인 상태인데 classCastException이 터지지 않더라고요 null인 경우면 원래 classCastException이 터지지 않나요?

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 명석님

자바에서 null 값을 다른 참조 타입으로 캐스팅하는 것은 ClassCastException을 발생시키지 않습니다. ClassCastException은 오브젝트의 실제 타입과 캐스팅하려는 타입이 호환되지 않을 때 발생합니다. 그러나 null은 모든 참조 타입과 호환될 수 있기 때문에, null을 다른 어떤 참조 타입으로 캐스팅해도 문제가 발생하지 않습니다.

예를 들어, 다음 코드에서는 null 값을 Integer 타입으로 캐스팅하고 있습니다:

Integer integer = (Integer) integerBox.get();

여기서 integerBox.get()null을 반환한다면, integer 변수는 단순히 null 값을 가지게 됩니다. 이 경우 ClassCastException은 발생하지 않습니다.

이는 Java 언어 사양의 일부로, null은 특별한 값이며 모든 참조 타입에 대해 유효한 값으로 간주되기 때문입니다. 따라서 이러한 캐스팅은 안전하게 진행됩니다.

감사합니다.

명석님의 프로필 이미지
명석

작성한 질문수

질문하기