조건 연산자 수수께끼: 삼항 대 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!