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.


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.


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".


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 = "";

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.


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.