Josh Bloch와 William Pugh가 작성한 java puzzles vid을 시간 인덱스 0 : 25 : 00-33 : 00에서 살펴보십시오. 스피커의Java Puzzlers VI에서 버그를 발견했습니다. 누군가가 설명 할 수 있습니까?
하나는 소문자 boolean
대신 Boolean
사용하는 경우, 다음 LIVING
과 같이 처리됩니다 말한다 진정한 "일정 시간을 컴파일하지", 그리고이 초기화 될 때 더 이상 문제.
글쎄,이 모든 괜찮아요 멋지지만, 정적 초기화와 생성자 사이의 원래 순서로 되돌리고 간단한 "추출 방법"작업을 수행하면 어떻게되는지보십시오. 이들 두 개의 프로그램은 서로 다른 출력을 인쇄 :
public class Elvis {
private static final Elvis ELVIS = new Elvis();
private Elvis() {}
private static final boolean LIVING = true;
private final boolean alive = LIVING;
private final boolean lives() {return alive;}
public static void main(String[] args) {
System.out.println(ELVIS.lives()); // prints true
}
}
그리고 리팩토링 returnTrue()
방법
public class Elvis {
private static final Elvis ELVIS = new Elvis();
private Elvis() {}
private static final boolean LIVING = returnTrue();
private static boolean returnTrue() {
return true;
}
private final boolean alive = LIVING;
private final boolean lives() {return alive;}
public static void main(String[] args) {
System.out.println(ELVIS.lives()); // prints false
}
}
이유 returnTrue() 메소드는이 경우의 프로그램의 출력을 변경 추출 않는와
?
버그에 대한 버그/비디오에 버그가 있다는 것을 말하고 있습니까? 나는 그것의 재발이라고 생각하고 당신 stackoverflow 얻을 수 (하지만 당신은 이미 stackoverflow에 있습니다) : | – IAdapter
+1 - 답변을 알지 못했습니다. 나는 누군가에게 포워드했다. – Kylar