int의 Null 반환을 위한 삼항 연산자와 if 문 비교
Java에서는 삼항 연산자(?:)를 사용하여 다음을 할당할 수 있습니다. int가 null 값을 지원하지 않는 기본 데이터 유형이더라도 null을 int 유형의 변수로 변환합니다. 다음 코드 조각을 고려하십시오.
int temp() {
return true ? null : 0;
}
이 코드에서 삼항 연산자는 평가 조건이 true인 경우 변수 temp에 null을 할당하고, 그렇지 않으면 0을 할당합니다. 컴파일러는 오류를 발생시키지 않고 이 할당을 허용합니다. 그러나 메서드가 실행되면 null은 int에 유효한 값이 아니기 때문에 런타임에 NullPointerException이 발생합니다.
삼항 연산자와 달리 if 문은 다음 변수에 대한 null 할당을 허용하지 않습니다. 원시 유형. 예:
int same() {
if (true) {
return null;
} else {
return 0;
}
}
이 코드는 "호환되지 않는 유형: null을 int로 변환할 수 없습니다."라는 메시지와 함께 컴파일 시간 오류를 생성합니다. 이러한 불일치의 이유는 컴파일러가 null 값을 처리하는 방식에 있습니다.
삼항 연산자의 경우 컴파일러는 null 리터럴을 int의 래퍼 클래스인 Integer에 대한 null 참조로 해석합니다. 이는 오토박싱 및 언박싱에 대한 컴파일러 규칙 때문입니다. 기본 유형에서 객체 유형으로 변환할 때 JVM(Java Virtual Machine)은 해당 객체 래퍼에 기본 값을 자동으로 래핑합니다.
int는 기본 유형의 경우 컴파일러는 삼항 연산자가 반환한 null 값을 unboxing하려고 시도하며 이로 인해 NullPointerException이 발생합니다.
반면에 if 문은 수행되지 않습니다. 이 unboxing 프로세스와 null 리터럴은 Object에 대한 null 참조로 유지됩니다. same() 메서드의 반환 유형이 int이므로 컴파일러는 null 참조를 int로 변환할 수 없으므로 컴파일 시간 오류가 발생합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3