Originariamente inviato da Teo80
per evitare problemi (quali?)
La questione è una sola: una variabile locale deve essere inizializzata prima di poter essere usata.

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:

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);
    }
}
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.

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.

Originariamente inviato da Romeo25
quelle nei metodi invece no, percio rimarebbero a null
Sbagliato. Le variabili locali non hanno un valore di "default". Vedi spiegazione sopra.

Originariamente inviato da Romeo25
e se usi quella variabile e non viene inizializzata andresti incontro a errori non previsti.
Si andrebbe incontro ad un errore di compilazione, ovviamente.