Nota: sono ben consapevole che l'inizializzazione risolve il problema; Ho appena pensato che il compilatore avrebbe seguito il percorso di esecuzione e visto che foo sarebbe stato effettivamente inizializzato nel punto in cui suggerisce che "potrebbe" non esserlo.Comportamento imprevisto con l'inizializzazione Java
La mia ipotesi iniziale sarebbe che se la lunghezza non fosse mai finita 3, non avrei mai avuto bisogno di allocare memoria perché venisse usata.
Questo non verrà mai utilizzato nella produzione, sono semplicemente curiosi
vedere l'esempio seguente: -
List<String> foo;
int length = 5;
if (length > 3)
{
foo = new ArrayList<String>();
}
if (length > 4)
{
foo.add("bar");
}
Perché questa causa il seguente da visualizzare?
La foo variabile locale non può essere stato inizializzato
Sicuramente seguendo i rami, non v'è mai un caso in cui foo non è inizializzato. So che se dovessi fare: -
List<String> foo = null;
non ci sarebbero problemi di compilazione, ma perché ho bisogno di fare questo?
@down voter, potresti almeno fornire un motivo? – chrisw