CharSequence vs. String di Java

1. Perkenalan

Sederhananya, CharSequence dan String adalah dua konsep fundamental yang berbeda di Java.

Dalam artikel singkat ini, kita akan melihat perbedaan antara tipe-tipe ini dan kapan harus menggunakannya.

2. CharSequence

CharSequence adalah antarmuka yang merepresentasikan urutan karakter. Mutabilitas tidak diberlakukan oleh antarmuka ini. Oleh karena itu, kelas yang dapat berubah dan tidak dapat diubah mengimplementasikan antarmuka ini.

Tentu saja, sebuah antarmuka tidak dapat dibuat secara langsung; itu membutuhkan implementasi untuk membuat variabel:

CharSequence charSequence = "baeldung";

Di sini, charSequence dibuat dengan String. Contoh implementasi lain:

CharSequence charSequence = new StringBuffer("baeldung"); CharSequence charSequence = new StringBuilder("baeldung");

3. String

String adalah urutan karakter di Jawa. Ini adalah kelas yang tidak dapat diubah dan salah satu tipe yang paling sering digunakan di Java. Kelas ini mengimplementasikan antarmuka CharSequence , Serializable , dan Comparable .

Di bawah kedua contoh, buat String dengan konten yang sama. Namun, mereka tidak sama satu sama lain:

@Test public void givenUsingString_whenInstantiatingString_thenWrong() { CharSequence firstString = "baeldung"; String secondString = "baeldung"; assertNotEquals(firstString, secondString); }

4. CharSequence vs. String

Mari kita bandingkan perbedaan dan kesamaan CharSequence dan String . Keduanya berada dalam paket yang sama bernama java.lang. , tetapi yang pertama adalah antarmuka dan yang terakhir adalah kelas konkret. Selain itu, kelas String tidak dapat diubah.

Dalam contoh berikut, setiap operasi penjumlahan membuat instance lain, meningkatkan jumlah data yang disimpan, dan mengembalikan String yang paling baru dibuat :

@Test public void givenString_whenAppended_thenUnmodified() { String test = "a"; int firstAddressOfTest = System.identityHashCode(test); test += "b"; int secondAddressOfTest = System.identityHashCode(test); assertNotEquals(firstAddressOfTest, secondAddressOfTest); }

Di sisi lain, StringBuilder memperbarui String yang sudah dibuat untuk menampung nilai baru:

@Test public void givenStringBuilder_whenAppended_thenModified() { StringBuilder test = new StringBuilder(); test.append("a"); int firstAddressOfTest = System.identityHashCode(test); test.append("b"); int secondAddressOfTest = System.identityHashCode(test); assertEquals(firstAddressOfTest, secondAddressOfTest); }

Perbedaan lainnya adalah bahwa antarmuka tidak menyiratkan strategi perbandingan bawaan, sedangkan kelas String mengimplementasikan antarmuka Comparable .

Untuk membandingkan dua CharSequence , kita dapat memasukkannya ke String lalu membandingkannya:

@Test public void givenIdenticalCharSequences_whenCastToString_thenEqual() { CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue(charSeq1.toString().compareTo(charSeq2.toString()) > 0); }

5. Kesimpulan

Kami biasanya menggunakan String di tempat kami tidak yakin apa yang harus digunakan untuk urutan karakter. Namun, dalam beberapa kasus, StringBuilder dan StringBuffer bisa lebih sesuai.

Anda dapat menemukan informasi lebih lanjut di JavaDocs tentang CharSequence dan String.

Dan, seperti biasa, penerapan semua contoh dan cuplikan kode ini dapat ditemukan di Github.