La questione è una sola: una variabile locale deve essere inizializzata prima di poter essere usata.Originariamente inviato da Teo80
per evitare problemi (quali?)
Le specifiche del linguaggio dicono: Each local variable (§14.4) and every blank final (§4.12.4) field (§8.3.1.2) must have a definitely assigned value when any access of its value occurs..
Il compilatore effettua una "analisi del flusso conservativa" per verificare che qualunque sia il percorso di esecuzione del codice, prima dell'utilizzo di una variabile locale essa sia inizializzata.
Ecco un esempio:
Anche se tu sai che nel corpo del for la variabile 'i' può assumere solo i valori 0, 1, 2, il compilatore non lo sa. Lui sa solo che l'espressione dello switch è una variabile intera, che potrebbe avere qualunque valore, non solo 0,1,2 e quindi teoricamente è possibile che nessuno dei 3 case venga eseguito e allora la variabile 's' non verrebbe inizializzata.codice:public static void test () { for (int i=0; i<3; i++) { String s; switch (i) { case 0: s = "zero"; break; case 1: s = "uno"; break; case 2: s = "due"; break; } System.out.println (s); } }
Il metodo sopra non compila, viene segnalato un errore: variable s might not have been initialized
Come risolverlo? O si inizializza subito la variabile con qualcosa es:
String s = "";
Oppure si può mettere un default: nello switch dove si assegna qualcosa alla variabile.
Sbagliato. Le variabili locali non hanno un valore di "default". Vedi spiegazione sopra.Originariamente inviato da Romeo25
quelle nei metodi invece no, percio rimarebbero a null
Si andrebbe incontro ad un errore di compilazione, ovviamente.Originariamente inviato da Romeo25
e se usi quella variabile e non viene inizializzata andresti incontro a errori non previsti.