> Java > java지도 시간 > 본문

왜 삼항 연산자는 Int 메서드에서 Null을 반환할 수 있는데 If 문에서는 그렇지 않습니까?

DDD
풀어 주다: 2024-11-05 22:12:02
원래의
779명이 탐색했습니다.

Why Can a Ternary Operator Return Null in an Int Method, But an If Statement Can't?

조건 연산자 수수께끼: 삼항 대 If 문에서 Null 반환

Java에서 조건(삼항) 연산자는 다음과 같은 경우에 흥미로운 퍼즐을 만듭니다. 메소드 반환 유형을 다룹니다. 다음 코드를 고려하십시오.

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

    private int temp() {
        return true ? null : 0;
        // Compiler allows null return for int method
    }

    private int same() {
        if (true) {
            return null;
            // Compiler error: incompatible types
        } else {
            return 0;
        }
    }

}</code>
로그인 후 복사

temp() 메서드에서 삼항 연산자는 메서드가 int를 반환하도록 선언되었음에도 불구하고 null 반환을 허용합니다. 이렇게 반직관적으로 보이는 동작은 컴파일러가 null을 Integer 개체에 대한 null 참조로 해석하는 것으로 설명됩니다. 그런 다음 조건 연산자에 대해 자동박싱/언박싱 규칙을 적용하여 Integer 개체가 반환됩니다. 그러나 이 작업은 잠재적인 런타임 NullPointerException을 마스크합니다.

반대로, same() 메서드에서 삼항 연산자를 if 문으로 나타내려고 하면 호환되지 않는 유형으로 인해 컴파일 시간 오류가 발생합니다. 이는 if 문이 int 반환 메서드에 대해 null 반환을 허용하지 않기 때문입니다.

퍼즐의 핵심은 삼항 연산자와 if 문의 차이점에 있습니다. 삼항 연산자를 사용하면 조건에 따라 값을 반환할 수 있지만 if 문에서는 반환 유형을 명시적으로 지정해야 합니다. 따라서 삼항 연산자는 주의하지 않으면 int 메소드에 null 반환을 몰래 넣을 수 있는 반면, if 문은 반환된 값이 메소드 서명과 호환되는지 확인하는 유형 검사를 시행합니다.

위 내용은 왜 삼항 연산자는 Int 메서드에서 Null을 반환할 수 있는데 If 문에서는 그렇지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!