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.