Quindi sappiamo che una variabile locale deve essere inizializzata per poter essere usata nel costrutto if-else-if. Ad esempio, il seguente codice non verrà compilato.Perché una variabile locale viene avviata nei costrutti if-else ma non nei costrutti if-else-if?
public class Test {
public static void main (String...args){
double price= 11;
String model ;
if (price>10)
{model ="smartphone";}
else if (price<=11)
{model="not smart phone";}
System.out.println(model);
}
}
Ma, se si cambia else if (price<=11)
-else
o inizializzate la modello locale String variabile per un valore casuale, il codice verrà compilato con successo. La mia domanda in questo caso è "perché?"
Ora, questa era una domanda da un libro e la spiegazione è stata:.
"il modello variabile locale viene dichiarata solo, non inizializzata L'inizializzazione del modello variabile è collocato all'interno del se e else-if costrutti: se si inizializza una variabile all'interno di un costrutto if o else-if, il compilatore non può essere sicuro se queste condizioni verranno valutate come vere, con conseguente non inizializzazione della variabile locale. "
Anche dopo la spiegazione, io ancora non ho capito due cose,
- io non sono sicuro perché il modello variabile sarà confondere il compilatore, dal momento che doppia il prezzo è 11 indipendentemente da ciò che il modello è.
- Come si inizializza magicamente la variabile locale quando si inserisce altro alla fine?
'prezzo' è una variabile e come tale il suo valore potrebbe essere' variabile'. Quindi, nel tuo codice, non vi è alcuna garanzia che "if" o "else if" vengano immessi in –
l'ultima condizione if non possa riuscire su 11.5 e poiché non esiste nessun altro modello non verrà inizializzato, –
@ Joop per 11,5, sicuramente la prima condizione è soddisfatta. Tuttavia, fallirebbe per NaN. –