StringBuilder versus StringBuffer
Kompromi keamanan thread
StringBuilder versus StringBuffer adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Dua Kelas yang Dapat Diubah
Java memiliki dua kelas string yang dapat diubah: StringBuilder dan StringBuffer. API keduanya hampir identik, tetapi memiliki satu perbedaan penting: keamanan utas.
Antarmuka yang Sama
Kedua kelas menyediakan append, insert, delete, reverse, dan metode lainnya. Kode yang menggunakan salah satunya biasanya dapat dialihkan ke kelas lain hanya dengan mengubah nama jenisnya.
public class Main {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append(", ").append("World");
System.out.println(sb);
}
}StringBuffer Disinkronkan
Metode StringBuffer bersifat disinkronkan, artinya beberapa utas dapat mengubah instans yang sama dengan aman. Keamanan ini memiliki sedikit biaya kinerja.
public class Main {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("thread-safe");
buffer.append("!");
System.out.println(buffer);
}
}StringBuilder Tidak Disinkronkan
StringBuilder tidak menggunakan sinkronisasi sehingga menjadi lebih cepat. Konsekuensinya, satu instans tidak aman untuk digunakan bersama oleh beberapa utas tanpa koordinasi eksternal.
public class Main {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("fast");
builder.append("!");
System.out.println(builder);
}
}Kapan Menggunakan StringBuilder
Gunakan StringBuilder dalam kasus umum: saat membuat string di dalam satu metode atau satu utas. Ini adalah pilihan bawaan untuk hampir semua kode sehari-hari.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append("#");
}
System.out.println(sb);
}
}Kapan Menggunakan StringBuffer
Gunakan StringBuffer hanya ketika satu instans pembangun benar-benar digunakan bersama dan diubah oleh beberapa utas. Dalam praktiknya, situasi ini jarang terjadi.
public class Main {
public static void main(String[] args) {
StringBuffer shared = new StringBuffer("log: ");
shared.append("event A; ");
shared.append("event B");
System.out.println(shared);
}
}Variabel Lokal Tidak Dibagikan
Pembangun yang dideklarasikan dan digunakan hanya di dalam satu metode tidak pernah terlihat oleh utas lain, sehingga StringBuilder selalu tepat digunakan di sana. Ketiadaan sinkronisasi tidak dapat menimbulkan masalah.
public class Main {
static String build() {
StringBuilder sb = new StringBuilder();
sb.append("local only");
return sb.toString();
}
public static void main(String[] args) {
System.out.println(build());
}
}Perbedaan Kinerja
Beban tambahan sinkronisasi pada StringBuffer membuatnya lebih lambat dalam penggunaan dengan satu utas. Untuk perulangan intensif, StringBuilder memiliki kinerja yang lebih baik.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
sb.append('x');
}
System.out.println("Built length: " + sb.length());
}
}Catatan Sejarah
StringBuffer hadir lebih dahulu, pada masa awal Java. StringBuilder ditambahkan pada Java 5 sebagai alternatif yang lebih cepat dan tanpa sinkronisasi untuk kasus umum dengan satu utas.
Memilih dengan Tepat
Jadikan StringBuilder pilihan bawaan. Beralihlah ke StringBuffer hanya jika Anda dapat membuktikan bahwa satu instans dibagikan di antara beberapa utas. Jika tidak, Anda membayar biaya keamanan yang tidak diperlukan.
public class Main {
public static void main(String[] args) {
StringBuilder result = new StringBuilder();
result.append("Use StringBuilder ").append("by default");
System.out.println(result);
}
}Keduanya Mengonversi Menjadi String
Kedua kelas menghasilkan String yang tidak dapat diubah melalui toString(). Pilihan di antara keduanya hanya memengaruhi proses pembuatan, bukan hasil akhirnya.
public class Main {
public static void main(String[] args) {
String a = new StringBuilder("one").toString();
String b = new StringBuffer("two").toString();
System.out.println(a + " " + b);
}
}Pemeriksaan Singkat
Apa perbedaan utama antara StringBuilder dan StringBuffer?
Rangkuman
Anda telah mempelajari perbedaannya:
- Keduanya memiliki antarmuka yang hampir identik
StringBufferdisinkronkan (aman untuk utas, lebih lambat)StringBuildertidak disinkronkan (lebih cepat)- Jadikan
StringBuilderpilihan bawaan untuk pembuatan dengan satu utas - Gunakan
StringBufferhanya untuk instans yang benar-benar dibagikan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “StringBuilder versus StringBuffer” gratis?
Ya — teks lengkap “StringBuilder versus StringBuffer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “StringBuilder versus StringBuffer”?
Kompromi keamanan thread Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “StringBuilder versus StringBuffer” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa String Tidak Dapat Diubah
- Membangun String dengan StringBuilder
- Metode StringBuilder
- StringBuilder versus StringBuffer