삼항 연산자와 int의 Null 반환에 대한 if 문
Java에서는 삼항 연산자(?:)를 사용하여 다음을 할당할 수 있습니다. int가 null 값을 지원하지 않는 기본 데이터 유형이더라도 null을 int 유형의 변수로 변환합니다. 다음 코드 조각을 고려하십시오.
<code class="java">int temp() { return true ? null : 0; }</code>
이 코드에서 삼항 연산자는 평가 조건이 true인 경우 temp 변수에 null을 할당하고, 그렇지 않으면 0을 할당합니다. 컴파일러는 오류를 발생시키지 않고 이 할당을 허용합니다. 그러나 메서드가 실행되면 null은 int에 유효한 값이 아니기 때문에 런타임에 NullPointerException이 발생합니다.
삼항 연산자와 달리 if 문에서는 다음 변수에 대한 null 할당을 허용하지 않습니다. 원시 유형. 예:
<code class="java">int same() { if (true) { return null; } else { return 0; } }</code>
이 코드는 "호환되지 않는 유형: null을 int로 변환할 수 없습니다."라는 메시지와 함께 컴파일 시간 오류를 생성합니다. 이러한 불일치의 원인은 컴파일러가 null 값을 처리하는 방식에 있습니다.
삼항 연산자의 경우 컴파일러는 null 리터럴을 int의 래퍼 클래스인 Integer에 대한 null 참조로 해석합니다. 이는 오토박싱 및 언박싱에 대한 컴파일러 규칙 때문입니다. 기본 유형에서 객체 유형으로 변환할 때 JVM(Java Virtual Machine)은 해당 객체 래퍼에 기본 값을 자동으로 래핑합니다.
int는 기본 유형인 경우 컴파일러는 삼항 연산자가 반환한 null 값을 unboxing하려고 시도하며 이로 인해 NullPointerException이 발생합니다.
반면에 if 문은 이 unboxing 프로세스를 수행하지 않으며 null 리터럴은 그대로 유지됩니다. Object에 대한 null 참조로 사용됩니다. same() 메서드의 반환 유형이 int이므로 컴파일러는 null 참조를 int로 변환할 수 없으므로 컴파일 시간 오류가 발생합니다.
위 내용은 if 문은 허용하지 않는 반면 삼항 연산자는 int에 대해 Null 반환을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!