다음 코드 :
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
JDK 8 (-source 1.6 사용)에서 오류없이 컴파일되지만 JDK 6에서 오류 메시지와 함께 실패합니다.
Operator '+' cannot be applied to java.lang.Object and java.lang.String
오류가 무엇인지 이해하지만 왜 JDK 8로 컴파일됩니까? 이것은 어디에나 문서화되어 있습니까?
답변
JLS 15.26.2. 복합 할당 연산자 상태 :
형태의 복합 대입 식을
E1 op= E2
동등E1 = (T) ((E1) op (E2))
여기서T
의 타입E1
즉 제외E1
한번만 평가된다.
이 문장은 Java 6 에서 Java 14 와 동일하며 Java 가 시작된 이후로 변경되지 않았을 것입니다.
그래서 value += suffix
같은value = (Object) (value + suffix)
Java 6 컴파일러는 해당 명령문을 컴파일하지 못했습니다.