2015-04-02 8 views
5

qual è la differenza tra una variabile assegnata a null e altre non assegnate in java.Qual è la differenza tra una variabile assegnata a null e altre non assegnate

So che c'è una differenza nel blocco del metodo, strega dire che posso utilizzare la variabile che ha inizializzato a null, ma non posso usare che non è inizializzata

mi puoi dire perché?

edit: Grazie a tutti coloro che hanno risposto

La mia domanda riguarda il comportamento e la forma di riferimenti nella memoria

+0

La risposta è nella domanda: uno ha un valore assegnato di 'null', gli altri non hanno alcun valore assegnato. – JonK

+0

controlla [jls] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-16.html) – SomeJavaGuy

+0

Consulta anche http://stackoverflow.com/questions/12461607/does- da-fare-a-differenza-se-i-use-a-default-initalisation-o-no-inizializzazione – Raedwald

risposta

7

Qual è la differenza tra una variabile assegnata null e gli altri non assegnato?

  • Una variabile non inizializzata non ha un valore, nemmeno null (che è il motivo per cui non può essere letto)
  • Un inizializzata variabile ha un valore (ad esempio null, 5 o "hello") .

Si noti che le variabili membro ricevono automaticamente valori predefiniti (e il valore predefinito per un tipo di riferimento è null). Quindi, mentre può sembrare che tu possa leggere una variabile membro "non inizializzata", la verità è che è infatti inizializzato.

1

E 'intento esplicito contro implicazione. Se non si imposta un oggetto su , nulla può essere dimenticato e quindi il compilatore ti ricorda. Se si imposta esplicitamente su null, il compilatore è sicuro di aver fatto la scelta. Inoltre, per alcuni tipi, il valore di unset potrebbe essere diverso da null, quindi consentire al compilatore di rendere la scelta pericolosa (c.f. Problemi di default di C++ che differiscono tra le implementazioni).

1

variabili assegnati a null significa che non punta a nulla dove, come quella che non è assigned e se è significa una variabile locale non è nemmeno ancora inizializzato

Test t1=null; ----> Not Pointing to any Object 
Test t2; ------> Not even initialized 

se t2 è variabile locale e si intende utilizzare si otterrà errore di compilazione, come in primo luogo l'inizializzazione prima di utilizzare come valore di default, non è lì per questa variabile

1

Vedere il JLS 4.12.5. Initial Values of Variables:

Per tutti i tipi di riferimento (§4.3), il valore predefinito è null.

ReferenceType: 
    ClassOrInterfaceType 
    TypeVariable 
    ArrayType 

Quindi non c'è alcuna differenza per variabili membro, se non in modo esplicito assegnarlo a null, sarà implicitamente assegnato.

1

Directely da Oracle site

I campi che vengono dichiarati, ma non inizializzate sarà impostato su una ragionevole di default dal compilatore. In generale, questo valore predefinito sarà zero o null, a seconda del tipo di dati. Affidarsi a tali valori predefiniti, tuttavia, è generalmente considerato uno stile di programmazione errato.

Il seguente grafico riepiloga i valori predefiniti per i tipi di dati sopra riportati.

Tipo di dati Valore predefinito (per i campi) byte 0 breve 0 int 0 lungo 0L float 0.0f doppia 0.0d char '\ u0000' String (o qualsiasi altro oggetto) null booleano falso

Le variabili locali sono leggermente diverse; il compilatore non assegna mai un valore predefinito a una variabile locale non inizializzata. Se non è possibile inizializzare la variabile locale in cui è stata dichiarata, assicurarsi di assegnargli un valore prima di tentare di utilizzarlo. L'accesso a una variabile locale non inizializzata comporterà un errore in fase di compilazione.

La speranza ti ha aiutato!

Problemi correlati