Class StringBuffer adalah class yang terdapat pada package java.lang dan digunakan untuk membuat objek string mutable dan tidak seperti class String yang immutable.
StringBuffer dapat berubah secara dinamis. StringBuffer lebih dianjurkan untuk digunakan ketika memerlukan banyak operasi pada string, seperti menambahkan, memasukkan, menghapus atau memodifikasi string.
StringBuffer juga thread safe.
StringBuffer merupakan urutan dari karakter-karakter yang dapat diubah dengan bantuan dari berbagai method yang dimiliki oleh class tersebut.
Namun sebelumnya, untuk mengingat kembali dengan mudah mengapa String itu immutable, lihat baris kode berikut:
1 2 3 4 5 6 7 |
public class Test_String { public static void main(String[] args) { String string = "Belajar Java "; string.concat("Itu Menyenangkan"); System.out.print(string); } } |
Output:
Belajar Java
Mengapa hasil tidak menampilkan “Belajar Java Itu Menyenangkan”? Karena String adalah immutable.
Dan ini sebenarnya yang terjadi pada kode di atas:

Pada gambar di atas, dua objek ternyata telah dibuat. Namun, variabel referensi string ternyata masih mengacu ke “Belajar Java”, tidak mengacu ke “Belajar Java Itu Menyenangkan”.
Sekarang coba perhatikan baris kode berikut:
1 2 3 4 5 6 7 |
public class Test_String { public static void main(String[] args) { String string = "Belajar Java "; string = string.concat("Itu Menyenangkan"); System.out.print(string); } } |
Output:
Belajar Java Itu Menyenangkan
Mengapa outputnya sekarang berbeda dengan output kode pertama?
Hal ini karena secara eksplisit objek “Belajar Java Itu Menyenangkan” telah ditetapkan pada variabel string (lihat baris kode nomor 5 di atas).
Perbedaan StringBuffer Dan String
Berikut ini adalah perbedaan mendasar antara StringBuffer dan String yang perlu untuk diketahui:
No | StringBuffer | String |
---|---|---|
1 | Class mutable | Class immutable |
2 | StringBuffer lebih cepat dan lebih sedikit mengkonsumsi memori ketika melakukan concat atau perangkaian String. |
String mengkonsumsi lebih banyak memori dan lebih lambat ketika melakukan concat atau merangkaikan String. Karena setiap kali hal itu dilakukan,maka instance baru akan di buat. |
3 | Class StringBuffer tidak meng-override method equals() dari class Object. |
Dapat membandingkan konten dari dua String dengan method equals(). Karena class String meng-override method equals() tersebut dari class Object. |
Constructor
Terdapat 4 konstruktor untuk class StringBuffer yaitu:
- StringBuffer ( )
- StringBuffer (int size)
- StringBuffer (String str)
- StringBuffer (charSequence [ ]ch)
Method-method Penting Pada Class StringBuffer
Berikut ini adalah beberapa method penting dari class StringBuffer yang sering digunakan:
No | Method | Penjelasan |
---|---|---|
1 | append() | Merangkaikan argumen yang diberikan dengan string terkait |
2 | insert() | Memasukkan string yang diberikan pada suatu string diposisi tertentu |
3 | reverse() | Membalikkan string |
4 | replace() | Mengganti string dari beginIndex dan endIndex tertentu |
5 | capacity() | Mengembalikan nilai kapasitas string. Nilai default adalah 16. Jika jumlah karakter bertambah dari kapasitas lama, maka nilai kapasitas yang baru adalah (nilai kapasitas lama * 2) + 2. Jadi misalkan nilai kapasitas adalah 16, maka setelah penambahan karakter nilai kapasitas menjadi (16 * 2) + 2 = 34 |
6 | ensureCapacity() | Memastikan bahwa kapasitas yang diberikan adalah sekurang-kurangnya sama dengan spesifikasi minimum. Jika kapasitas argumen lebih besar dibandingkan dengan kapasitas saat ini, maka kapasitas akan meningkat dengan (nilai kapasitas lama * 2) + 2. Sebagai contoh, jika nilai kapasitas saat ini adalah 16, maka akan menjadi (16 * 2) + 2 = 34. |
7 | delete() | Menghapus string dari beginIndex (indeks awal) yang ditentukan sampai dengan endIndex (indeks akhir) yang ditentukan. |
Contoh Penggunaan Method append(), insert(), replace(), dan reverse() Pada StringBuffer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class Test_StringBuffer { public static void main(String[] args) { StringBuffer stringBuffer = new StringBuffer("Belajar Java "); System.out.println(stringBuffer);//Belajar Java System.out.println();//Baris kosong System.out.println("Sekarang string ditambah dengan " + "'Itu Menyenangkan' menjadi:"); System.out.println(stringBuffer.append("Itu Menyenangkan")); System.out.println();//Baris kosong System.out.println("Sekarang 'Memang ' dimasukkan " + "pada indeks 0 menjadi:"); System.out.println(stringBuffer.insert(0, "Memang ")); System.out.println();//Baris kosong System.out.println("Sekarang 'Masa Sih' menggantikan karakter pada " + "beginIndex 0 dan endIndex 6 menjadi:"); System.out.println(stringBuffer.replace(0, 6, "Masa Sih")); System.out.println();//Baris kosong System.out.println("Sekarang karakter dihapus pada " + "beginIndex 0 dan endIndex 9 menjadi:"); System.out.println(stringBuffer.delete(0, 9)); System.out.println();//Baris kosong System.out.println("Sekarang string dibalik menjadi: "); System.out.println(stringBuffer.reverse()); } } |
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Belajar Java Sekarang string ditambah dengan 'Itu Menyenangkan' menjadi: Belajar Java Itu Menyenangkan Sekarang 'Memang ' dimasukkan pada indeks 0 menjadi: Memang Belajar Java Itu Menyenangkan Sekarang 'Masa Sih' menggantikan karakter pada beginIndex 0 dan endIndex 6 menjadi: Masa Sih Belajar Java Itu Menyenangkan Sekarang karakter dihapus pada beginIndex 0 dan endIndex 9 menjadi: Belajar Java Itu Menyenangkan Sekarang string dibalik menjadi: nakgnaneyneM utI avaJ rajaleB |
Contoh menggunakan method capacity() dan ensureCapacity()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Test_StringBuffer { public static void main(String[] args) { StringBuffer stringBuffer = new StringBuffer(); System.out.println("Kapasitas default adalah:"); System.out.println(stringBuffer.capacity()); System.out.println(); System.out.println("String sekarang adalah " + stringBuffer.append("Belajar Java1234")); System.out.println("Kapasitas sekarang adalah:"); System.out.println(stringBuffer.capacity()); System.out.println(); System.out.println("String sekarang adalah " + stringBuffer.append("5")); System.out.println("Kapasitas sekarang adalah:"); System.out.println(stringBuffer.capacity());//sekarang (16*2)+2=34 atau (nilai kapasitas lama *2) + 2 System.out.println(); stringBuffer.append("6789"); System.out.println("String sekarang adalah: " + stringBuffer); System.out.println("Kapasitas sekarang adalah " + stringBuffer.capacity());//34 System.out.println(); System.out.println("ensureCapacity di set 60"); stringBuffer.ensureCapacity(60); System.out.println("Kapasitas sekarang adalah:"); System.out.println(stringBuffer.capacity());//34 * 2 + 2 } } |
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Kapasitas default adalah: 16 String sekarang adalah Belajar Java1234 Kapasitas sekarang adalah: 16 String sekarang adalah Belajar Java12345 Kapasitas sekarang adalah: 34 String sekarang adalah: Belajar Java123456789 Kapasitas sekarang adalah 34 ensureCapacity di set 60 Kapasitas sekarang adalah: 70 |
Leave a Reply