2014-07-23 9 views
6

Ho letto molte domande e risposte precedentemente fatte su questo argomento [o abbastanza simili], ma nessuno di loro ha veramente affrontato questo punto a vuoto. Quando si dichiara un nuovo varibale booleano, è ridondante [ad es. inutile] per inizializzarlo su falso?L'impostazione di un booleano su falso è ridondante?

boolean selectedZone = false; 

contro solo dichiarando

boolean selectedZone; 

Gli altri post ho esaminato sono Why is Java's default value for Boolean set to true? e Default value of Boolean in java

+0

Quindi la domanda è, sono booleani inizializzate a "false" per impostazione predefinita. In realtà non lo so e sono curioso, dopo essere venuto da 'C' non prendo nulla per scontato, quindi sono curioso :) – EpicPandaForce

+0

Beh credo che sarebbe corretto nel dire che i booleani * sono * falsi di default, ma è C'è qualche ragione per cui solo dichiararlo e lasciarlo come tale è meno giusto allora inizializzarlo in modo falso al momento della dichiarazione. – triforceofcourage

+0

Vorrei andare per la prima opzione, solo per essere sicuro, e inoltre rende il codice più chiaro, impostando esplicitamente la variabile su ** false ** può migliorare la comprensione dell'algoritmo –

risposta

6

Nella maggior parte dei casi è ridondante. L'eccezione è se si tratta di una variabile locale, nel qual caso deve essere inizializzata prima di essere utilizzata.Esempi:

class Example{ 
    boolean value1;//valid, initialized to false 
    public void doStuff(){ 
     boolean value2;//valid, but uninitialized 
     System.out.println(value1);//prints "false" (assuming value1 hasn't been changed) 
     System.out.println(value2);//invalid, because value2 isn't initialized. This line won't compile. 

Altra documentazione su questo: https://web.archive.org/web/20140814175549/https://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#96595

Anche se le variabili vengono inizializzate, è ancora potrebbe voler dichiarare esplicitamente i loro valori iniziali. Può rendere il codice più leggibile e consente alle persone che leggono il tuo codice di sapere che è una decisione consapevole impostarlo su quel valore.

Related

3

E 'ridondante, ma io lo trovo più chiaro.

Lo stesso vale per:

int var = 0; 

vs.

int var; 

non ho fatto questo in su:

valori predefiniti

Non è sempre necessario assegnare un valore quando viene dichiarato un campo. I campi dichiarati ma non inizializzati verranno impostati su un valore ragionevole predefinito da dal compilatore. In generale, questo valore predefinito sarà zero o nullo, a seconda del tipo di dati. Affidarsi a tali valori di default di , tuttavia, è generalmente considerato come una cattiva programmazione dello stile .

Nella tabella seguente sono riepilogati i valori predefiniti per i tipi di dati precedenti .
dati Valore di default (per i campi)
byte 0
breve 0
int 0
lungo 0L
float 0.0f
doppia 0.0d
char '\ u0000'
String (o qualsiasi oggetto ) null
booleano falso

(Source)

Tuttavia, un s i commenti suggeriscono, se è una variabile locale, deve essere inizializzata.

+0

sei sicuro al 100% che è inizializzato a zero? Bene, andrò a controllare ... – EpicPandaForce

+0

@Zhuinden, yes int in Java sono inizializzati a 0 per impostazione predefinita. –

+1

'int var;' seguito da 'System.out.println (" "+ var);' fornisce l'errore di compilazione "var potrebbe non essere stato inizializzato" come variabile locale, ma non come variabile di istanza o classe (statica) nel qual caso sono inizializzati a '0' – EpicPandaForce

2

Sì, è possibile ignorare l'inizializzazione in modo esplicito su false - tuttavia solo perché è possibile non significa che si dovrebbe.

L'impostazione esplicita su false rende il codice molto più chiaro (e più semplice per gli sviluppatori provenienti da altre lingue in cui questo comportamento non è predefinito).

+1

Punto per te. La ragione per farlo è molto semplice: toglie ogni dubbio. Se vedo una variabile non inizializzata, posso solo chiedermi "È stato intenzionalmente lasciato non inizializzato perché dovrebbe essere falso, o forse ho trovato un bug?" Soprattutto nell'applicazione media che non è così piccola, ci sono ampie possibilità che i bug mantengano l'esistenza inosservata e quindi si dovrebbe fare tutto il possibile per eliminare ogni dubbio. – Gimby

Problemi correlati