Initialisieren mehrerer Variablen mit demselben Wert in Java

214

Ich suche nach einer sauberen und effizienten Methode, um mehrere Variablen desselben Typs und desselben Werts zu deklarieren. Gerade habe ich:

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

Aber ich suche so etwas wie:

String one,two,three = ""

Ist das etwas, was in Java möglich ist? Effizienz im Auge behalten.

user83643
quelle
5
Effizienz im Auge behalten Effizienz von was?
Khachik
15
Länge des Codes, Zeit bis zur Eingabe, visuell einfach. Das ist, was ich meine. Ich weiß, dass das Reservieren von Gedächtnis das Reservieren von Gedächtnis ist und dass diese Frage mit der „menschlichen“ Seite der Dinge zusammenhängt.
user83643
1
Ich würde sagen, dass dies im Allgemeinen gegen akzeptierte Java-Konventionen verstößt. Es wird den Leser überraschen und IMHO ist schwerer zu lesen, als sie in separaten Zeilen zu deklarieren.
Simeon
4
Ich habe nach der Leistung gesucht (auf Java 8). A = b = c = d = e = wahr dauert 2x + mal als a = wahr; b = wahr; und so weiter.
Amit Kumar Gupta

Antworten:

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

Dies sollte mit unveränderlichen Objekten funktionieren. Für veränderbare Objekte macht es zum Beispiel keinen Sinn:

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

Alle Variablen würden auf dieselbe Instanz verweisen. In diesem Fall würden Sie wahrscheinlich Folgendes benötigen:

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

Oder besser noch ein Array oder ein Collection.

Alfredo Osorio
quelle
11
Es gibt Fälle, in denen dies auch für veränderbare Objekte sinnvoll ist. Zum Beispiel im Konstruktor der Linkedlist-Implementierung, wo anfänglich: head = tail = new Node (value). Kopf und Schwanz sollten also auf dieselbe Referenz zeigen.
Bcorso
Sind das das gleiche Objekt? Wenn ich es später tue, one = "cat"wird es two.equals("cat")wahr sein?
Aequitas
Die einzige Einschränkung ist, dass dies für statische Variablen nicht funktioniert.
Igor Ganapolsky
Was ist mit ganzzahligen Deklarationen?
IgorGanapolsky
Warum funktioniert das nicht mit Kalender? Wenn Sie dies tun, verhält sich jede Variable gleich, wenn Sie eine von ihnen manipulieren
TheCrazyProfessor
59

Sie können mehrere Variablen deklarieren und mehrere Variablen initialisieren, jedoch nicht beide gleichzeitig:

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

Diese Art von Dingen (insbesondere die mehrfachen Zuweisungen) würden jedoch von den meisten Java-Entwicklern missbilligt, die es als das Gegenteil von "visuell einfach" betrachten würden.

Michael Borgwardt
quelle
24
+1 für den Hinweis, dass das, was er versucht, nicht die Norm ist.
Brian Roach
Dies ist für String, aber wie für ganze Zahlen? int Tag, Monat, Jahr, Stunde, min = Tag = Monat = Jahr = Stunde = 0; ist es richtig ??
Ranjit
23

Nein, in Java ist das nicht möglich.

Sie können dies auf diese Weise tun. Aber versuchen Sie es zu vermeiden .

String one, two, three;
one = two = three = "";
Sgokhales
quelle
8
Können Sie erklären, warum dies vermieden werden sollte?
Neuron
@ Lonely Neuron Ich denke, es ist leicht, einen Fehler zu machen, wenn Sie es auf diese Weise verwenden.
Yuhang Lin
3
@ YuhangLin Ich hatte nur auf eine bessere Antwort gehofft
Neuron
@LonelyNeuron Gut für einen ist es langsamer. Es dauert fast doppelt so lange, als würden Sie nur separat initialisieren. Zum einen ist diese "Funktion" nicht erforderlich. Ich kann mir kein Szenario vorstellen, das mit einem anderen Ansatz nicht lösbar wäre. Es heißt einfach kein sauberer Code.
Alexander Heim
@ AlexanderHeim Danke für die Erklärung. Aber der Grund, den ich gefragt habe, war, dass es Teil der Antwort sein sollte.
Neuron
18

Funktioniert für Grundelemente und unveränderliche Klassen wie StringWrapper-Klassen Character, Byte.

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

Für veränderbare Klassen

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

Es werden drei Referenzen + ein Objekt erstellt. Alle Verweise verweisen auf dasselbe Objekt und Ihr Programm verhält sich schlecht.

Srujan Kumar Gulla
quelle
2
Ich bin nicht einverstanden mit "Alle Verweise, die auf dasselbe Objekt verweisen, und Ihr Programm verhalten sich schlecht." Das einzige Problem ist, dass das, was mit dem Objekt einer Referenz passiert, mit dem Objekt einer anderen Referenz passiert - weil es dasselbe Objekt ist. Dies ist kein Fehlverhalten; So funktioniert Java.
GKFX
Was meinst du mit "schlecht benehmen"? Es wird sich anders verhalten als 3 separat initialisierte Objekte, aber es hängt wirklich davon ab, was Sie wollen.
Neuron
12

Du kannst das:

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

Diese weisen jedoch alle auf dieselbe Instanz hin. Es wird keine Probleme mit endgültigen Variablen oder primitiven Typen verursachen. Auf diese Weise können Sie alles in einer Zeile erledigen.

HyperNeutrino
quelle
2

Ich denke nicht, dass es möglich ist, dass Sie alle Werte individuell einstellen müssen (wie im ersten Beispiel, das Sie angegeben haben).

Das zweite Beispiel, das Sie gegeben haben, initialisiert nur die letzte Variable auf "" und nicht die anderen.

RMT
quelle
0

Viel zu spät, aber der einfachste Weg, den ich gefunden habe, ist:

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

Ausgabe:

hello
hello
hello
starscream_disco_party
quelle