다음 코드 :
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로 컴파일됩니까? 이것은 어디에나 문서화되어 있습니까?
값이 String 일 필요는 없습니다. value가 정수이면 문자열을 추가하는 것이 의미가 없습니다. Maybye 당신은 문자열로 값을 캐스팅하려고 할 수 있습니다
—
fedoraHacker
@fedoraHacker 표현식
—
Grodriguez
value = value + suffix
은 값의 유형에 관계없이 완전히 합법적입니다. 그래서 나도 value += suffix
합법적이어야합니다.
와, 나도 몰랐어 다른 객체의 요점은 데이터가 할 수있는 것과 할 수없는 것에 대한 규칙을 정의하는 것이라고 생각했습니다. 다른 데이터 유형과 객체를 갖는 요점은 유형이 한 가지 일을 수행하도록 책임을 분리하는 것이지만 잘 수행하는 것입니다. 나는 당신이 그런 데이터 유형을 혼합 할 수 있다고 당황했습니다. 그럼 당신이 뭔가 매일 :)과 가치 = 배우고 난 전혀 구문 이의를 제기 해달라고 그래서 값 + 접미사, 값 + = 접미사와 excact 동일합니다
—
fedoraHacker
예. 그러나 문자열 유형은 다소 특별합니다. 여기서 + 연산자는 "문자열 연결 연산자"입니다. 피연산자 중 하나만 문자열 인 경우 다른 피연산자는 식을 평가하기 전에 문자열로 변환됩니다. JLS의이 섹션을 참조하십시오 .
—
Grodriguez
아, 나는 문자열이 그것을 그렇게 변환했는지 몰랐다. 질문에 답변 한 후에도 답장을 보내 주셔서 감사합니다.
—
fedoraHacker