0Pricing
Java Academy · Pelajaran

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
  • StringBuffer disinkronkan (aman untuk utas, lebih lambat)
  • StringBuilder tidak disinkronkan (lebih cepat)
  • Jadikan StringBuilder pilihan bawaan untuk pembuatan dengan satu utas
  • Gunakan StringBuffer hanya 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

  1. Mengapa String Tidak Dapat Diubah
  2. Membangun String dengan StringBuilder
  3. Metode StringBuilder
  4. StringBuilder versus StringBuffer
← Kembali ke Java Academy