String vs StringBuilder vs StringBuffer Java dan Penjelasannya
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.// 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
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
5 komentar untuk "String vs StringBuilder vs StringBuffer Java dan Penjelasannya"
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 -
Manakah yang lebih unggul String, StringBuffer, atau StringBuilder pada Java?
BalasHapusMenurut saya yang paling unggul adalah String Java karena merupakan keyword yang paling singkat untuk ditulis.
HapusJawabannya adalah bergantung kebutuhan dari program itu sendiri.
HapusApa perbedaan antara String literal dan string object pada Java?
BalasHapusString 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