>Java >java지도 시간 >Null 반환으로 인해 삼항 연산자에서는 NullPointerException이 발생하지만 If 문에서는 컴파일 시간 오류가 발생하는 이유는 무엇입니까?

Null 반환으로 인해 삼항 연산자에서는 NullPointerException이 발생하지만 If 문에서는 컴파일 시간 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-05 07:30:021013검색

Why Does a Null Return Cause a NullPointerException in a Ternary Operator but a Compile-Time Error in an If Statement?

삼항 연산자와 If 문의 Null 반환

다음 Java 코드 조각을 고려하세요.

<code class="java">public class Main {

    private int temp() {
        return true ? null : 0;
    }

    private int same() {
        if (true) {
            return null;
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}</code>

In temp() 메소드, 삼항 연산자 true ? null : 0은 true가 true인지 확인하고 null을 반환하고, 그렇지 않으면 0을 반환합니다. 메서드의 반환 유형이 int임에도 불구하고 컴파일러는 null 반환을 허용합니다. 그러나 코드를 실행하면 NullPointerException이 발생합니다.

same() 메서드에서 if 문은 true가 true인 경우 null을 반환하려고 시도하지만 호환되지 않는 반환으로 인해 컴파일러는 컴파일 타임 오류를 보고합니다. type.

차이가 있는 이유

주요 차이점은 컴파일러가 삼항 연산자와 if 문에서 null을 해석하는 방식입니다. 삼항 연산자에서 null은 Integer 개체에 대한 null 참조로 처리됩니다. 오토박싱 및 언박싱 규칙(Java 언어 사양, 15.25)에 따라 unboxing을 통해 null이 자동으로 int로 변환되어 int가 사용될 때 NullPointerException이 발생합니다.

반대로 if 문은 명시적으로 표현식이 true이고 선언된 int 반환 유형과 호환되지 않는 null을 반환하려고 시도합니다. 따라서 컴파일러는 잘못된 코드 실행을 방지하기 위해 컴파일 타임 오류를 생성합니다.

위 내용은 Null 반환으로 인해 삼항 연산자에서는 NullPointerException이 발생하지만 If 문에서는 컴파일 시간 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.