Inizializzazione di più variabili sullo stesso valore in Java


214

Sto cercando un metodo pulito ed efficiente per dichiarare più variabili dello stesso tipo e dello stesso valore. In questo momento ho:

String one = "", two = "", three = "" etc...

Ma sto cercando qualcosa come:

String one,two,three = ""

È qualcosa che è possibile fare a java? Tenendo presente l'efficienza.


5
Tieni a mente l' efficienza di cosa?
Khachik,

15
Lunghezza del codice, tempo di digitazione, visivamente semplice. Questo è ciò che intendo. So che riservare memoria è riservare memoria e che questa domanda è collegata al lato "umano" delle cose.
user83643

1
Direi che questo è generalmente contro le convenzioni Java accettate, sorprenderà il lettore e IMHO è più difficile da leggere che dichiararle su righe separate.
Simeon,

4
Ho verificato le prestazioni (su java 8) a = b = c = d = e = true richiede 2x + volte rispetto a a = true; b = vero; e così via.
Amit Kumar Gupta,

Risposte:


319
String one, two, three;
one = two = three = "";

Questo dovrebbe funzionare con oggetti immutabili. Non ha alcun senso per gli oggetti mutabili, ad esempio:

Person firstPerson, secondPerson, thirdPerson;
firstPerson = secondPerson = thirdPerson = new Person();

Tutte le variabili indicherebbero la stessa istanza. Probabilmente ciò di cui avresti bisogno in quel caso è:

Person firstPerson = new Person();
Person secondPerson = new Person();
Person thirdPerson = new Person();

O meglio usare ancora un array o a Collection.


11
Ci sono casi in cui ciò ha senso anche per gli oggetti mutabili. Ad esempio, nel costruttore dell'implementazione dell'elenco collegato in cui inizialmente: head = tail = new Node (value). Quindi sia la testa che la coda dovrebbero indicare lo stesso riferimento.
bcorso,

Sono questi lo stesso oggetto? Se dopo lo one = "cat"farò two.equals("cat")tornerà vero?
Aequitas,

L'unica avvertenza è che questo non funzionerebbe per le variabili statiche.
IgorGanapolsky,

Che dire delle dichiarazioni intere?
IgorGanapolsky,

Perché questo non funziona con Calendar? se lo fai ogni variabile si comporta allo stesso modo quando ne manipoli una
TheCrazyProfessor

59

È possibile dichiarare più variabili e inizializzare più variabili, ma non entrambe contemporaneamente:

 String one,two,three;
 one = two = three = "";

Tuttavia, questo genere di cose (in particolare i compiti multipli) sarebbero disapprovati dalla maggior parte degli sviluppatori Java, che la considererebbero l' opposto di "visivamente semplice".


24
+1 per aver sottolineato che ciò che sta cercando di fare non è la norma.
Brian Roach,

questo è per String, ma come per gli interi ?? int giorno, mese, anno, ora, min = giorno = mese = anno = ora = 0; è giusto ??
Ranjit,

23

No, non è possibile in Java.

Puoi farlo in questo modo .. Ma cerca di evitarlo .

String one, two, three;
one = two = three = "";

8
Puoi spiegare perché questo dovrebbe essere evitato?
Neurone,

@Solo Neurone Penso che sia facile fare un errore se lo usi in questo modo.
Yuhang Lin,

3
@YuhangLin speravo solo in una risposta migliore
Neuron,

@LonelyNeuron Beh, per uno è più lento. Ci vuole quasi il doppio del tempo come se si inizializzasse separatamente. L'altra questa "caratteristica" non è necessaria. Non riesco a pensare a uno scenario che non sarebbe risolvibile usando un approccio diverso. Si dice semplicemente non un codice pulito.
Alexander Heim,

@AlexanderHeim Grazie per la spiegazione. Ma il motivo per cui l'ho chiesto è perché dovrebbe essere parte della risposta.
Neurone,

18

Funziona con primitive e classi immutabili come String, classi di wrapper Character, Byte.

int i=0,j=2   
String s1,s2  
s1 = s2 = "java rocks"

Per le classi mutabili

Reference r1 = Reference r2 = Reference r3 = new Object();`  

Vengono creati tre riferimenti + un oggetto. Tutti i riferimenti puntano allo stesso oggetto e il tuo programma si comporterà male.


2
Non sono d'accordo con "Tutti i riferimenti che puntano allo stesso oggetto e il tuo programma si comporteranno male". L'unico problema è che ciò che accade all'oggetto di un riferimento accade all'oggetto di un altro riferimento, perché è lo stesso oggetto. Questo non è un comportamento scorretto; è come funziona Java.
GKFX,

cosa intendi con "comportarsi male"? Si comporterà in modo diverso rispetto a 3 oggetti inizializzati separatamente, ma dipende davvero da ciò che vuoi ..
Neuron,

12

Puoi farlo:

String one, two, three = two = one = "";

Ma tutti indicheranno la stessa istanza. Non causerà problemi con variabili finali o tipi primitivi. In questo modo, puoi fare tutto in una riga.


2

Non penso che sia possibile impostare tutti i valori individualmente (come nel primo esempio fornito).

Il secondo esempio che hai fornito, inizializzerà solo l'ultimo valore su "" e non gli altri.


0

Troppo tardi, ma il modo più semplice che ho trovato è:

String foo = bar = baz = "hello"
println(foo)
println(bar)
println(baz)

Produzione:

hello
hello
hello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.