Menginisialisasi banyak variabel ke nilai yang sama di Java

214

Saya mencari metode yang bersih dan efisien untuk mendeklarasikan beberapa variabel dari tipe yang sama dan dengan nilai yang sama. Sekarang saya punya:

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

Tapi saya mencari sesuatu seperti:

String one,two,three = ""

Apakah ini sesuatu yang mungkin dilakukan di java? Menjaga efisiensi dalam pikiran.

pengguna83643
sumber
5
Jaga efisiensi dalam pikiran efisiensi apa?
khachik
15
Panjang kode, waktu mengetik, sederhana secara visual. Itu yang aku maksud. Saya tahu bahwa menyimpan memori adalah menyimpan memori dan bahwa pertanyaan ini terkait dengan sisi 'manusia'.
user83643
1
Saya akan mengatakan bahwa ini umumnya bertentangan dengan konvensi Java yang diterima, itu akan mengejutkan pembaca dan IMHO lebih sulit dibaca daripada mendeklarasikannya pada baris yang berbeda.
Simeon
4
Saya memeriksa kinerja (pada java 8) a = b = c = d = e = true membutuhkan 2x + kali daripada a = true; b = benar; dan seterusnya.
Amit Kumar Gupta

Jawaban:

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

Ini harus bekerja dengan objek yang tidak berubah. Tidak masuk akal untuk objek yang bisa berubah misalnya:

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

Semua variabel akan menunjuk ke instance yang sama. Mungkin yang Anda butuhkan dalam kasus itu adalah:

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

Atau lebih baik lagi gunakan array atau a Collection.

Alfredo Osorio
sumber
11
Ada kasus-kasus di mana ini masuk akal untuk objek yang bisa berubah juga. Misalnya, dalam konstruktor implementasi linkedlist di mana awalnya: head = tail = new Node (value). Jadi kepala dan ekor harus menunjuk ke referensi yang sama.
bcorso
Apakah ini benda yang sama? Jika saya nanti one = "cat"akan two.equals("cat")kembali benar?
Aequitas
Satu-satunya peringatan adalah bahwa ini tidak akan berfungsi untuk variabel statis.
IgorGanapolsky
Bagaimana dengan deklarasi integer?
IgorGanapolsky
Mengapa ini tidak berfungsi dengan Kalender? jika Anda melakukan itu setiap variabel berperilaku seperti itu sama ketika Anda memanipulasi salah satu dari mereka
TheCrazyProfessor
59

Anda dapat mendeklarasikan banyak variabel, dan menginisialisasi banyak variabel, tetapi tidak keduanya sekaligus:

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

Namun, hal semacam ini (terutama banyak tugas) akan disukai oleh sebagian besar pengembang Java, yang akan menganggapnya kebalikan dari "visual sederhana".

Michael Borgwardt
sumber
24
+1 untuk menunjukkan bahwa apa yang dia coba lakukan bukanlah norma.
Brian Roach
ini untuk String, tetapi bagaimana untuk bilangan bulat ?? hari int, bulan, tahun, jam, min = hari = bulan = tahun = jam = 0; Apakah tepat ??
Ranjit
23

Tidak, ini tidak mungkin di java.

Anda bisa melakukan ini .. Tapi cobalah menghindarinya .

String one, two, three;
one = two = three = "";
sgokhales
sumber
8
Bisakah Anda menjelaskan mengapa ini harus dihindari?
Neuron
@Lonely Neuron Saya pikir mudah untuk membuat kesalahan jika Anda menggunakannya dengan cara ini.
Yuhang Lin
3
@ YuhangLin saya hanya berharap untuk jawaban yang lebih baik
Neuron
@LonelyNeuron Yah untuk yang satu ini lebih lambat. Dibutuhkan hampir dua kali lipat waktu seolah-olah Anda hanya akan menginisialisasi secara terpisah. Satu lagi "fitur" ini tidak perlu. Saya tidak bisa memikirkan skenario yang tidak bisa dipecahkan dengan menggunakan pendekatan yang berbeda. Itu hanya mengatakan bukan kode bersih.
Alexander Heim
@AlexanderHeim Terima kasih atas penjelasannya. Tetapi alasan saya bertanya adalah karena itu harus menjadi bagian dari jawaban.
Neuron
18

Bekerja untuk primitif dan kelas abadi seperti String, Karakter kelas Wrapper, Byte.

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

Untuk kelas yang bisa berubah

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

Tiga referensi + satu objek dibuat. Semua referensi menunjuk ke objek yang sama dan program Anda akan berperilaku salah.

Srujan Kumar Gulla
sumber
2
Saya tidak setuju dengan "Semua referensi yang menunjuk ke objek yang sama dan program Anda akan berperilaku buruk." Satu-satunya masalah adalah bahwa apa yang terjadi pada objek dari satu referensi terjadi pada objek dari referensi lain - karena itu adalah objek yang sama. Ini bukan perilaku salah; Begitulah cara kerja Java.
GKFX
apa yang kamu maksud dengan "perilaku buruk"? Ini akan berperilaku berbeda dari 3 objek yang diinisialisasi secara terpisah, tetapi itu benar-benar tergantung pada apa yang Anda inginkan ..
Neuron
12

Kamu bisa melakukan ini:

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

Tapi ini semua akan menunjuk ke contoh yang sama. Itu tidak akan menyebabkan masalah dengan variabel akhir atau tipe primitif. Dengan cara ini, Anda dapat melakukan semuanya dalam satu baris.

HyperNeutrino
sumber
2

Saya tidak berpikir itu mungkin Anda harus mengatur semua nilai individualling (seperti contoh pertama yang Anda berikan.)

Contoh kedua yang Anda berikan, hanya akan menginisialisasi varuable terakhir ke "" dan bukan yang lain.

RMT
sumber
0

Terlambat untuk ini tetapi cara paling sederhana yang saya temukan adalah:

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

Keluaran:

hello
hello
hello
starscream_disco_party
sumber