은 내가이 컴파일 된 코드자바 컴파일러가 필드 초기화를 인식하지 못하는 이유는 무엇입니까?
int myVar;
final boolean condition = <someCondition>;
if (condition) {
myVar = 1;
}
if (condition) {
System.out.println("myVar = " + myVar);
}
의 다음 조각이 가정, 나는 myVar might not have been initialized
오류가 예상되었다. 이것은 컴파일러의 버그입니까? condition
이 true 일 때 "myVar"가 설정되고 condition
이 true 일 때만 참조되는 것을 쉽게 알 수 있습니다. (condition
도 재설정되지 않습니다.)
P .: 0으로 초기화해야하는 해당 의견에 대해 알고 있습니다. (. 즉, 값이 최대 한 번 설정)하지만 요점은 내가 "myVar에"마지막 될 수있는 JLS에 설명 된대로
* 왜 컴파일러입니다 * 초기화가 필요합니다. – azurefrog
Java 컴파일러는 변수가 사용되기 전에 항상 변수 myVar에 할당된다는 결론을 내릴 수있는 충분한 분석을 수행하지 않습니다. 일반적으로 다른 조건문에서 조건을 상관 시키려하지 않습니다. –
컴파일러가 조건이 변경되지 않는다고 생각하지 않는다고 생각합니다. 예를 들어 인터럽트 된 CPU에서 실행됩니다. 이 작업을 다시 실행하면 조건이 변경 될 수 있습니다. 신경 쓰지 마라, 나는 상태의 선언을 보지 않았다. @ 존 볼링 거는 충분히 충분 해 보입니다. – bhow