Memahami Class StringBuffer Pada Java

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
8
9
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:

immutable string pada Java

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
8
9
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:
NoStringBufferString
1Class mutableClass immutable
2StringBuffer 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.
3Class 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:

NoMethodPenjelasan
1append()Merangkaikan argumen yang diberikan
dengan string terkait
2insert()Memasukkan string yang diberikan pada
suatu string diposisi tertentu
3reverse()Membalikkan string
4replace()Mengganti string dari beginIndex dan
endIndex tertentu
5capacity()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
6ensureCapacity()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.
7delete()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
27
28
29
30
31
32
33
34
35
36
37
38
package com.bahasaJava.test_StringBuffer;

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
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.bahasaJava.test_StringBuffer;

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

Tidak ada komentar

Bahasa Java. Diberdayakan oleh Blogger.