Java'da birden çok değişkeni aynı değere başlatma


214

Aynı tür ve aynı değere sahip birden çok değişken bildirmek için temiz ve verimli bir yöntem arıyorum. Şu an var:

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

Ama şöyle bir şey arıyorum:

String one,two,three = ""

Bu Java'da yapılabilecek bir şey mi? Verimliliği akılda tutarak.


5
Verimliliği neyin verimliliğini göz önünde bulundurun ?
khachik

15
Kodun uzunluğu, yazma zamanı, görsel olarak basit. Demek istediğim bu. Belleği ayırmanın belleği ayırdığını ve bu sorunun şeylerin 'insan' tarafı ile ilgili olduğunu biliyorum.
user83643

1
Bunun genellikle kabul edilen Java sözleşmelerine aykırı olduğunu söyleyebilirim, okuyucuyu şaşırtacak ve IMHO'nun bunları ayrı satırlarda bildirmekten daha zor olduğunu söyleyebilirim.
Simeon

4
Performansı kontrol ettim (java 8'de) a = b = c = d = e = true, a = true'dan 2x + kat daha fazla sürer; b = doğru; ve bunun gibi.
Amit Kumar Gupta

Yanıtlar:


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

Bu değişmez nesnelerle çalışmalıdır. Değişken nesneler için bir anlam ifade etmiyor, örneğin:

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

Tüm değişkenler aynı örneğe işaret eder. Muhtemelen bu durumda ihtiyacınız olan şey:

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

Ya da daha iyisi bir dizi veya bir kullanın Collection.


11
Bunun değiştirilebilir nesneler için de anlamlı olduğu durumlar vardır. Örneğin, başlangıçta Linkedlist uygulamasının yapıcısında: head = tail = new Node (value). Dolayısıyla hem kafa hem de kuyruk aynı referansı göstermelidir.
bcorso

Bunlar aynı nesne mi? Daha sonra yaparsanız one = "cat"olacak two.equals("cat")return true?
Aequitas

Tek uyarı, bunun statik değişkenler için işe yaramayacağıdır.
IgorGanapolsky

Tam sayı bildirimleri ne olacak?
IgorGanapolsky

Bu Takvim ile neden çalışmıyor? Bunlardan birini manipüle ettiğinizde her değişken aynı şekilde davranırsa
TheCrazyProfessor

59

Birden çok değişkeni bildirebilir ve birden çok değişkeni başlatabilirsiniz, ancak ikisini aynı anda değil:

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

Bununla birlikte, bu tür bir şey (özellikle çoklu ödevler), çoğu "görsel olarak basit" in tersini düşünen çoğu Java geliştiricisi tarafından kaşlarını çattı .


24
+1 yapmaya çalıştığı şeyin norm olmadığını işaret ettiği için .
Brian Roach

Bu String için, ama nasıl tamsayılar için ?? int gün, ay, yıl, saat, dk = gün = ay = yıl = saat = 0; doğru mu ??
Ranjit

23

Hayır, java'da mümkün değil.

Bu şekilde yapabilirsiniz .. Ama bundan kaçınmaya çalışın .

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

8
Bundan neden kaçınılması gerektiğini açıklayabilir misiniz?
Neuron

@Lonely Neuron Bu şekilde kullanırsanız hata yapmanın kolay olduğunu düşünüyorum.
Yuhang Lin

3
@YuhangLin daha iyi bir cevap bekliyordum
Neuron

@LonelyNeuron Birisi daha yavaş. Ayrı ayrı başlatır gibi neredeyse iki kat daha fazla zaman alır. Bir diğeri bu "özellik" gereksiz. Farklı bir yaklaşımla çözülemeyecek bir senaryo düşünemiyorum. Sadece temiz bir kod değil dedi.
Alexander Heim

@AlexanderHeim Açıklama için teşekkürler. Ama sordumun nedeni cevabın bir parçası olmasıydı.
Neuron

18

İlkel ve değişmez sınıflar için çalışır String, Wrapper sınıfları Character, Byte.

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

Değişken sınıflar için

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

Üç referans + bir nesne oluşturulur. Tüm başvurular aynı nesneyi gösterir ve programınız yanlış davranır.


2
"Aynı nesneyi işaret eden tüm referanslar ve programınız yanlış davranacaktır" konusuna katılmıyorum. Tek sorun, bir referansın nesnesine olan şeyin başka bir referansın nesnesine gerçekleşmesidir - çünkü aynı nesne. Bu yanlış davranış değildir; Java böyle çalışır.
GKFX

"misbehave" ile ne demek istiyorsun? 3 ayrı ayrı başlatılan nesneden farklı davranacak, ama gerçekten ne istediğinize bağlı ..
Neuron

12

Bunu yapabilirsiniz:

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

Ancak bunların hepsi aynı örneğe işaret edecektir. Nihai değişkenler veya ilkel tiplerle ilgili sorunlara neden olmaz. Bu şekilde, her şeyi tek bir satırda yapabilirsiniz.


2

Tüm değerleri ayrı ayrı ayarlamanızın mümkün olduğunu düşünmüyorum (verdiğiniz ilk örnek gibi).

Verdiğiniz ikinci örnek, diğerleri için değil, yalnızca son "" değişkenini ilklendirir.


0

Buna çok geç ama bulduğum en basit yol:

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

Çıktı:

hello
hello
hello
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.