Spójrz na to java puzzles vid autorstwa Josha Blocha i Williama Pugha, o indeksie czasowym 0: 25: 00-0: 33: 00.Znalazłem błąd w Java Puzzlers VI - czy ktoś może to wyjaśnić?
Jednym z prelegentów mówi, że jeśli używasz małe boolean
zamiast Boolean
, następnie LIVING
będą traktowane jako prawdziwy „kompilacji stałą”, a to już nie ma znaczenia, gdy jest on zainicjowany.
Cóż, to wszystko jest cacy, ale spójrz na to, co się dzieje, kiedy powróci do pierwotnego celu między statyczne startowych i konstruktora, a następnie go zwykłą „Wyciąg metoda” operacji. Te dwa programy drukować różne wyjścia:
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
}
}
I z refactored returnTrue()
metody
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
}
}
Dlaczego wydobycia metodą returnTrue() zmienić wyjście programu w tym przypadku?
Czy mówisz, że są błędy w bug/video o błędach? Myślę, że to się nazywa nawrotem i możesz dostać stackoverflow (ale już jesteś na stackoverflow): | – IAdapter
+1 - Nie znałem odpowiedzi. Przekazałem komuś, kto to robi. – Kylar