Dalam Java, String, StringBuffer, dan StringBuilder sering digunakan kelas string dalam pemrograman. Perbedaan di antara mereka juga merupakan pertanyaan yang sering ditanyakan dalam wawancara. Sekarang ringkas dan lihat bagaimana mereka berbeda dan sama.
1. Variabel dan tidak berubah
Kelas String menggunakan array karakter untuk menyimpan string, sebagai berikut: karena ada pengubah "akhir", Anda dapat mengetahui bahwa objek string tidak dapat diubah.
nilai arang akhir pribadi [];
Baik StringBuilder dan StringBuffer diwarisi dari kelas AbstractStringBuilder. Dalam AbstractStringBuilder, array karakter digunakan untuk menyimpan string. Sebagai berikut, dapat dilihat bahwa kedua objek dapat berubah.
nilai char [];
2. Apakah multi-threaded dan aman?
Objek dalam string tidak dapat diubah, sehingga dapat dipahami sebagai konstanta, yang jelas-jelas aman.
AbstractStringBuilder adalah kelas induk publik dari StringBuilder dan StringBuffer, yang mendefinisikan beberapa operasi dasar string, seperti ExpandCapacity, Append, Insert, IndexOF dan Metode Publik lainnya.
StringBuffer telah menambahkan kunci sinkronisasi ke metode atau kunci sinkronisasi ke metode yang dipanggil, sehingga aman-aman. Lihat kode sumber berikut:
Public Synchronized StringBuffer Reverse () {super.reverse (); return ini;} public int indexOf (string str) {return indexof (str,); // Ada Metode Int Int Sinkronisasi Publik (String Str String, int FromIndex)} StringBuilder tidak menambahkan kunci sinkronisasi ke metode ini, jadi itu tidak aman.
3. StringBuilder dan StringBuffer kesamaan
StringBuilder dan StringBuffer memiliki kelas orang tua publik AbstractStringBuilder (kelas abstrak).
Salah satu perbedaan antara kelas abstrak dan antarmuka adalah bahwa beberapa metode publik subkelas dapat didefinisikan dalam kelas abstrak. Subkelas hanya perlu menambahkan fungsi baru dan tidak perlu mengulangi metode yang ada; sementara antarmuka hanya mendefinisikan metode dan konstanta.
Metode StringBuilder dan StringBuffer akan memanggil metode publik di AbstractStringBuilder, seperti Super.Append (...). Hanya saja StringBuffer akan menambahkan kata kunci yang disinkronkan ke metode ini dan menyinkronkannya.
Akhirnya, jika program ini tidak multi-threaded, maka menggunakan StringBuilder lebih efisien daripada StringBuffer.
Ringkasan Perbedaan Antara String StringBuffer StringBuilder di Java
* Kelas String adalah kelas yang tidak dapat diubah. Selama string dimodifikasi, objek baru akan dihasilkan.
* StringBuffer dan StringBuilder keduanya adalah kelas yang dapat berubah, dan tidak ada objek baru yang dihasilkan oleh perubahan apa pun pada string.
Saat menggunakannya dalam praktik, jika Anda sering perlu memodifikasi string, seperti penyisipan, penghapusan, dll.
* Tapi apa perbedaan antara StringBuffer dan StringBuilder?
StringBuffer aman-utas dan sangat nyaman untuk digunakan dalam program multi-threaded, tetapi efisiensi program akan lebih lambat.
StringBuilder tidak aman utas dan lebih efisien daripada StringBuffer dalam satu utas.
* Secara umum, waktu berjalan dari ketiganya:
String> StringBuffer> StringBuilder