CharSequence vs String di Java

1. Pengenalan

Ringkasnya, CharSequence dan String adalah dua konsep asas yang berbeza di Jawa.

Dalam artikel ringkas ini, kita akan melihat perbezaan antara jenis ini dan kapan menggunakannya.

2. CharSequence

CharSequence adalah antara muka yang mewakili urutan watak. Kebolehubahan tidak ditegakkan oleh antara muka ini. Oleh itu, kedua-dua kelas yang boleh berubah dan tidak berubah melaksanakan antara muka ini.

Sudah tentu, antara muka tidak dapat dibuat secara langsung; ia memerlukan pelaksanaan untuk menunjukkan pemboleh ubah:

CharSequence charSequence = "baeldung";

Di sini, charSequence disusun dengan String. Membuat pelaksanaan lain:

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

3. tali

String adalah urutan watak di Java. Ini adalah kelas yang tidak berubah dan salah satu jenis yang paling kerap digunakan di Jawa. Kelas ini menerapkan antara muka CharSequence , Serializable , dan Comparable .

Di bawah kedua-duanya, buat Strings dengan kandungan yang sama. Walau bagaimanapun, mereka tidak sama antara satu sama lain:

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

4. CharSequence vs String

Mari bandingkan perbezaan dan persamaan CharSequence dan String . Mereka berdua berada dalam bungkusan yang sama bernama java.lang. , tetapi yang pertama adalah antara muka dan yang terakhir adalah kelas konkrit. Lebih-lebih lagi, kelas String tidak berubah.

Dalam contoh berikut, setiap operasi jumlah membuat contoh 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); }

Sebaliknya, StringBuilder mengemas kini String yang sudah dibuat untuk menyimpan 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); }

Perbezaan lain adalah bahawa antara muka tidak menyiratkan strategi perbandingan bawaan, sedangkan kelas String menerapkan antara muka yang Sebanding .

Untuk membandingkan dua CharSequence s, kita boleh membuangnya ke String s kemudian 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 di mana kami tidak pasti apa yang harus digunakan untuk urutan char. Walau bagaimanapun, dalam beberapa kes, StringBuilder dan StringBuffer lebih sesuai.

Anda boleh mendapatkan lebih banyak maklumat di JavaDocs mengenai CharSequence dan String.

Dan, seperti biasa, pelaksanaan semua contoh dan coretan kod ini terdapat di Github.