Hal ini seharusnya menjadi umumnya lebih baik untuk menggunakan StringBuilder
untuk rangkaian string di Java. Ini selalu terjadi?
Yang saya maksud adalah ini: Adalah biaya overhead menciptakan StringBuilder
objek, menyebut append()
metode dan akhirnya toString()
sudah lebih kecil maka concatenating ada string dengan +
operator untuk dua string, atau itu hanya dianjurkan untuk lebih banyak (dari dua) string?
Jika ada ambang batas tersebut, apa yang tidak tergantung pada (mungkin panjang string, tapi di mana)?
Dan akhirnya, anda akan perdagangan pembacaan dan keringkasan dari +
rangkaian untuk kinerja StringBuilder
yang lebih kecil dari kasus-kasus seperti dua, tiga atau empat senar?
Eksplisit penggunaan StringBuilder
untuk reguler penggabungan yang disebutkan sebagai usang di usang Jawa tips optimasi serta di Jawa mitos perkotaan.
Jika anda menggunakan rangkaian String dalam satu lingkaran, sesuatu seperti ini,
String s = "";
for (int i = 0; i < 100; i++) {
s += ", " + i;
}
maka anda harus menggunakan StringBuilder
(bukan StringBuffer
) bukan String
, karena itu jauh lebih cepat dan mengkonsumsi lebih sedikit memori.
Jika anda memiliki satu pernyataan,
String s = "1, " + "2, " + "3, " + "4, " ...;
kemudian anda dapat menggunakan String, karena compiler akan menggunakan
StringBuilder` secara otomatis.
Ralph's jawaban yang luar biasa. Saya lebih suka menggunakan StringBuilder kelas untuk membangun/menghias String karena penggunaan itu lebih terlihat seperti Pembangun pola.
public String decorateTheString(String orgStr){
StringBuilder builder = new StringBuilder();
builder.append(orgStr);
builder.deleteCharAt(orgStr.length()-1);
builder.insert(0,builder.hashCode());
return builder.toString();
}
Hal ini dapat digunakan sebagai helper/builder untuk membangun String, String tidak sendiri.
Sebagai aturan umum, selalu gunakan kode lebih mudah dibaca dan hanya refactor jika kinerja adalah masalah. Dalam kasus khusus ini, paling baru JDK's benar-benar akan mengoptimalkan kode ke StringBuilder versi dalam hal apapun.
Biasanya anda hanya benar-benar perlu untuk melakukannya secara manual jika anda melakukan rangkaian string dalam satu lingkaran atau dalam beberapa kode yang kompleks sehingga penyusun dapat't mudah mengoptimalkan.
Silahkan lihat di: http://www.javaspecialists.eu/archive/Issue068.html dan http://www.javaspecialists.eu/archive/Issue105.html
Lakukan tes yang sama di lingkungan anda dan memeriksa apakah baru JDK atau Java implementasi melakukan beberapa jenis operasi string yang lebih baik dengan String
atau lebih baik dengan StringBuilder
.
Bagian + operator menggunakan public String concat(String str)
secara internal. Metode ini salinan karakter dari dua string, sehingga memiliki persyaratan memori dan runtime kompleksitas sebanding dengan panjang dua string. StringBuilder bekerja lebih efisien.
Namun saya telah baca di sini bahwa concatination kode menggunakan + operater berubah untuk StringBuilder di Jawa pos 4 compiler. Jadi ini mungkin tidak menjadi masalah sama sekali. (Meskipun aku benar-benar akan memeriksa pernyataan ini jika saya tergantung pada hal itu dalam kode saya!)
Untuk dua string concat lebih cepat, dalam kasus lain StringBuilder adalah pilihan yang lebih baik, lihat penjelasan saya di https://stackoverflow.com/questions/8755063/concatenation-operator-vs-concat/13739225#13739225
Masalah dengan String concatenation adalah bahwa hal itu mengarah untuk menyalin objek String dengan semua biaya yang terkait. StringBuilder tidak threadsafe dan karena itu lebih cepat dari StringBuffer, yang digunakan untuk menjadi pilihan yang lebih disukai sebelum Java 5. Sebagai aturan praktis, anda tidak harus melakukan rangkaian String dalam satu lingkaran, yang akan disebut sering. Saya kira melakukan penggabungan beberapa di sini dan di sana tidak akan menyakiti anda selama anda tidak berbicara tentang ratusan dan ini tentu saja tergantung pada persyaratan kinerja. Jika anda melakukan real time barang-barang, anda harus sangat berhati-hati.
Microsoft sertifikasi material membahas pertanyaan yang sama ini. Di .Dunia NET, overhead untuk StringBuilder objek membuat rangkaian sederhana dari 2 objek String yang lebih efisien. Saya akan berasumsi jawaban serupa untuk Java string.