Lompat ke konten Lompat ke sidebar Lompat ke footer

String vs StringBuilder vs StringBuffer Java dan Penjelasannya

Sebuah string merupakan untaian dari suatu urutan karakter atau char. Pada Java, object string bersifat kekal atau tidak dapat diubah nilainya. Inisialisasi sebuah string merupakan salah satu pilar penting yang dibuat sebagai prasyarat yang dibutuhkan dalam bentuk pemahaman yang mendalam.

Sebelum lebih lanjut mempelajari materi tentang String vs StringBuilder vs StringBuffer Java dan Penjelasannya, terlebih dahulu pelajari materi tentang: StringBuffer Java Beserta Penjelasannya, StringBuilder Java Beserta Penjelasannya, dan Object String Java Bersifat Kekal.

Untuk saat ini, mari pertimbangkan kode berikut dengan tiga fungsi gabungan, yang terdiri dari tiga tipe parameter berbeda, yaitu String, StringBuffer, dan StringBuilder. Mari perjelas pemahaman diantara keduanya melalui satu program Java berikut yang kemudian akan ditarik suatu kesimpulan dari output yang dihasilkan untuk mengetahui perbedaan antara String vs StringBuilder vs StringBuffer pada Java.

Contoh:

// Program Java untuk

// mendemonstrasikan perbedaan

// antara String,

// StringBuilder dan

// StringBuffer.


// Main class

class MKN {


// Method 1

// Menggabungkan ke String

public static void concat1(String s1)

{s1 = s1 + "danmakan";}


// Method 2

// Menggabungkan ke

// StringBuilder

public static void concat2(StringBuilder s2)

{s2.append("danmakan");}


// Method 3

// Menggabungkan ke

// StringBuffer

public static void concat3(StringBuffer s3)

{s3.append("danmakan");}


// Method 4

// Main driver method

public static void main(String[] args)

{


// Custom input string

// String 1

String s1 = "Makan";


// Memanggil method definisi

// sebelumnya

concat1(s1);


// s1 tidak berubah

System.out.println("String: " + s1);


// String 1

StringBuilder s2 = new StringBuilder("Makan");


// Memanggilan method definisi

// sebelumnya

concat2(s2);


// s2 berubah

System.out.println("StringBuilder: " + s2);


// String 3

StringBuffer s3 = new StringBuffer("Makan");


// Memanggilan method definisi

// sebelumnya

concat3(s3);


// s3 berubah

System.out.println("StringBuffer: " + s3);

}


}

Output:
String: Makan
StringBuilder: Makandanmakan
StringBuffer: Makandanmakan


Penjelasan:
  • Concat1: Pada method ini dilewatkan sebuah string "Makan" dan menampilkan s1 = s1 + "danmakan". Nilai string dilewatkan dari main(), dimana nilainya tidak dapat diubah, hal ini berkenaan dengan sifat dari string yang tidak dapat diubah nilainya. Mengubah nilai string akan membuat object lain dan s1 di concat1() akan menyimpan referensi string baru. Sedangkan referensi s1 pada main() dan cocat1() akan merujuk ke string yang berbeda.
  • Concat2: Pada method ini dilewatkan sebuah string "Makan" dan menampilkan "s2.append("danmakan")" yang dapat mengubah nilai asli dari string pada fungsi main menjadi "Makandanmakan". Hal ini disebabkan oleh fakta sederhana bahwa StringBuilder dapat diubah nilainya.
  • Concat3: StringBuilder bersifat kompatibel pada semua kondisi terhadap StringBuffer, kecuali perbedaan utamanya adalah terletak pada keamanan thread. StringBuffer adalah thread-safe, sementara StringBuilder tidak menjamin keamanan thread, yang berarti method tersinkronisasi ada di StringBuffer yang membuat kontrol satu akses thread pada satu waktu sementara tidak dapat terlihat pada StringBuilder, oleh karena itu thread ini bersifat tidak aman.

Kapan Harus Menggunakan String, StringBuilder, dan StringBuffer Java:
  • Jika sebuah string akan bersifat konstan pada saat digunakan program, maka digunakan object class String karena kelas tersebut bersifat kekal atau tidak dapat diubah nilainya.
  • Jika sebuah string dapat berubah nilainya, misalnya pada kondisi dimana banyak logika dan operasi dalam konstruksi string tersebut, dan hanya akan diakses dari satu thread, maka dengan menggunakan StringBuilder saja hal tersebut sudah cukup.
  • Jika sebuah string dapat berubah nilainya dan akan diakses dari beberapa thread, maka dapat menggunakan StringBuffer karena StringBuffer bersifat sinkron, sehingga user memiliki keamanan thread. Namun, jika tidak menginginkan keamanan thread, maka user juga dapat menggunakan kelas StringBuilder karena sifatnya yang tidak disinkronkan.

Konversi Antara Tipe String pada Java

Terkadang ada kebutuhan untuk mengonversi object string dari kelas yang berbeda seperti String, StringBuffer, atau StringBuilder satu sama lain. Berikut adalah beberapa teknik untuk melakukan hal tersebut:

Kondisi 1: Dari String ke StringBuffer dan StringBuilder

Kondisi ini merupakan jalan keluar yang mudah karena user bisa langsung meneruskan object class String ke kelas konstruktor StringBuffer dan StringBuilder. Karena sifat dari kelas String tidak dapat diubah di Java, maka proses untuk mengedit string, dilakukan sama seperti proses konversi object class menjadi StringBuffer atau StringBuilder.

Contoh:

// Program Java untuk

// mendemonstrasikan konversi

// dari String ke StringBuffer

// dan StringBuilder.


// Main class

public class MKN {


// Main driver method

public static void main(String[] args)

{


// Kostumisasi input string

String str = "Makan";


// Konversi object String ke

// object StringBuffer dengan

// cara membuat object dari

// class StringBuffer

StringBuffer sbr = new StringBuffer(str);


// Membalik string

sbr.reverse();


// Mencetak nilai string yang

// telah dibalik

System.out.println(sbr);


// Mengonversi object String

// ke object StringBuilder

StringBuilder sbl = new StringBuilder(str);


// Menambahkannya ke string

// menggunakan method append()

sbl.append("DanMakan");


// Mencetak dan menampilkan

// nilai string yang telah

// ditambahkan

System.out.println(sbl);

}


}

Output:
nakaM
MakanDanMakan

Kondisi 2: Dari StringBuffer dan StringBuilder ke String

Konversi ini dapat dilakukan menggunakan metode toString() yang ditimpa pada class StringBuffer dan StringBuilder.

Di bawah ini adalah program Java untuk mendemonstrasikan hal yang sama. Perhatikan bahwa ketika user menggunakan method toString(), maka object String baru (di area Heap) akan dialokasikan dan diinisialisasi ke urutan karakter yang saat ini diwakili oleh object StringBuffer, yang berarti perubahan berikutnya pada object StringBuffer tidak memengaruhi konten dari object String.

Contoh:

// Program Java untuk

// mendemonstrasikan konversi

// dari String ke StringBuffer

// dan StringBuilder.


// Main class

public class MKN {


// Main driver method

public static void main(String[] args)

{


// Menciptakan object dari

// class StringBuffer

StringBuffer sbr = new StringBuffer("Makan");

StringBuilder sbdr = new StringBuilder("Hello");


// Konversi object

// StringBuffer ke String

// menggunakan method

// toString().

String str = sbr.toString();


// Mencetak String

System.out.println(

"StringBuffer object to String : ");

System.out.println(str);


// Konversi object

// StringBuilder ke String

String str1 = sbdr.toString();


// Mencetak String

System.out.println(

"StringBuilder object to String : ");

System.out.println(str1);


// Mengubah object

// StringBuffer sbr tetapi

// String object(str) tidak

// berubah.

sbr.append("DanMakan");


// Mencetak dua String pada

// console.

System.out.println(sbr);

System.out.println(str);

}


}

Output:
StringBuffer object to String :
Makan
StringBuilder object to String :
Hello
MakanDanMakan
Makan

Kondisi 3: Dari StringBuffer ke StringBuilder atau Sebaliknya

Konversi ini adalah kondisi yang terjadi dengan sedikit rumit, dimana tidak ada cara langsung untuk proses mengonversinya. Dalam hal ini, user dapat menggunakan object class String. dimana terlebih dahulu dilakukan konversi object StringBuffer atau StringBuilder menjadi String dengan menggunakan method toString() dan kemudian dari String ke StringBuilder atau StringBuffer menggunakan konstruktor.

Contoh:

// Program Java untuk konversi

// demonstrasi dari String ke

// StringBuffer dan

// StringBuilder.


// Main class

public class MKN {


// Main driver method

public static void main(String[] args)

{


// Menciptakan object dari

// class StringBuffer dan

// melewatkan input string.

StringBuffer sbr = new StringBuffer("Makan");


// Menyimpan nilai object

// StringBuffer pada String

// dan selanjutnya mengonversi

// objek StringBuffer menjadi

// class StringBuilder.

String str = sbr.toString();

StringBuilder sbl = new StringBuilder(str);


// Mencetak object

// StringBuilder pada console.

System.out.println(sbl);

}


}

Output:
Makan

Kesimpulan

Object String tidak dapat diubah, dan object StringBuffer serta StringBuilder dapat diubah. StringBuffer dan StringBuilder merupakan object yang serupa, tetapi StringBuilder lebih cepat dan lebih disukai penggunaannya daripada StringBuffer untuk program yang sifatnya single-thread. Namun, jika keamanan thread sangat diperlukan, maka StringBuffer adalah solusi yang paling sering digunakan.

Artikel ini didedikasikan kepada: Velina Claudya Ditarta, Vicky Wahyu Nala Hilma, Viko Aldino Wibowo, Viona Hayu Puspitarini, dan Viona Regina Prayoga.

5 komentar untuk "String vs StringBuilder vs StringBuffer Java dan Penjelasannya"

  1. Manakah yang lebih unggul String, StringBuffer, atau StringBuilder pada Java?

    BalasHapus
    Balasan
    1. Menurut saya yang paling unggul adalah String Java karena merupakan keyword yang paling singkat untuk ditulis.

      Hapus
    2. Jawabannya adalah bergantung kebutuhan dari program itu sendiri.

      Hapus
  2. Apa perbedaan antara String literal dan string object pada Java?

    BalasHapus
    Balasan
    1. String literal Java merupakan sekumpulan karakter yang dibuat dengan mengapit nilainya di dalam sepasang tanda kutip ganda. Sedangkan string object Java merupakan sekumpulan karakter yang dibut menggunakan operator new().

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -