다음 스 니펫에서 간단한 Java 코드를 살펴 보겠습니다.
public class Main {
private int temp() {
return true ? null : 0;
// No compiler error - the compiler allows a return value of null
// in a method signature that returns an int.
}
private int same() {
if (true) {
return null;
// The same is not possible with if,
// and causes a compile-time error - incompatible types.
} else {
return 0;
}
}
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.temp());
System.out.println(m.same());
}
}
이 가장 간단한 Java 코드 temp()
에서 함수의 리턴 유형이이지만 메소드는 컴파일러 오류를 발행하지 않으며 (문을 통해 ) int
값을 리턴하려고합니다 . 컴파일되면 런타임 예외가 발생 합니다.null
return true ? null : 0;
NullPointerException
그러나 if
( same()
메소드 에서 와 같이) 명령문으로 삼항 연산자를 나타내면 컴파일 타임 오류 가 발생하는 경우에도 같은 문제가 발생합니다! 왜?
null
를 만들려고하는지 이해하는 Integer
것입니다. "나에게"추측 "하거나"일이 잘되도록하는 것 "처럼 보일 것입니다.
Integer foo() { return "1"; }
는 컴파일되지 않습니다.)
int foo = (true ? null : 0)
및new Integer(null)
모두 컴파일 벌금, 오토 박싱의 명시적인 형태 인 두 번째.