Java SE 6과 Java SE 7 사이의 자동 언 박싱 동작의 차이에 주목했습니다.이 두 버전간에이 동작의 변경 사항에 대한 문서를 찾을 수 없기 때문에 그 이유가 궁금합니다.
다음은 간단한 예입니다.
Object[] objs = new Object[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
이것은 Java SE 7의 javac로 잘 컴파일됩니다. 그러나 컴파일러에 "-source 1.6"인수를 지정하면 마지막 줄에 오류가 발생합니다.
inconvertible types
found : java.lang.Object
required: int
Java SE 6을 다운로드하여 네이티브 버전 6 컴파일러 (-source 옵션없이)로 컴파일하려고했습니다. 위와 동일한 오류에 동의하고 제공합니다.
그래서 무엇을 제공합니까? 더 많은 실험을 통해 Java 6의 unboxing은 (컴파일시) boxed 유형 인 값만 unboxing 할 수있는 것으로 보입니다. 예를 들어, 이것은 두 버전 모두에서 작동합니다.
Integer[] objs = new Integer[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
따라서 Java 6과 7 사이에서 unboxing 기능이 향상되어 값이 적절한 boxed 유형인지 (컴파일 시간에) 알지 못해도 한 번에 객체 유형을 캐스팅하고 언 박스 할 수 있습니다. 그러나 Java 7이 나왔을 때 작성된 Java Language Specification이나 블로그 게시물을 읽었을 때이 내용의 변경 사항을 볼 수 없으므로 변경 사항이 무엇인지,이 "기능"이 무엇인지 궁금합니다. ?
호기심 일뿐입니다. 변경으로 인해 "잘못된"언 박싱이 발생할 수 있습니다.
Object[] objs = new Float[2];
objs[0] = new Float(5);
int myInt = (int)objs[0];
이것은 잘 컴파일되지만 런타임에 ClassCastException을 제공합니다.
이것에 대한 언급이 있습니까?
Integer obj = new Integer(2); int x = (int)obj;
: Java 7에서 작동하면 Java 6에서 오류가 발생합니다.