Hampir setiap program berurusan dengan teks: nama pengguna, alamat, pesan galat, isi berkas konfigurasi. Java menangani teks melalui class java.lang.String — tipe referensi yang begitu istimewanya sampai mendapat dukungan sintaks tingkat bahasa, seperti literal dengan tanda kutip ganda dan operator + untuk penggabungan. Chapter ini membahas dasar pembuatan String, penggabungan dengan + dan concat, serta method penyelidik paling dasar: length dan charAt. Pemahaman ini menjadi pijakan sebelum kita menyelami sifat immutable String pada chapter berikutnya.
Literal dan Pembuatan String #
Bentuk pembuatan paling umum adalah string literal: teks di antara tanda kutip ganda seperti "Budi" atau "Halo, dunia!". Compiler javac menempatkan literal tersebut di struktur khusus bernama string pool sehingga literal yang sama di dua tempat berbagi satu objek — mekanisme ini kita bedah tuntas pada Chapter String Pool. Bentuk kedua memakai new String("Bandung") yang selalu membuat objek baru terpisah di heap, terlepas dari isi yang sama sudah ada atau belum.
Variabel String adalah tipe referensi, namun berperilaku seperti nilai sederhana dalam pemakaian sehari-hari — kita tidak perlu memanggil new, dan mencetaknya dengan println langsung menampilkan isinya, bukan penanda internal objek.
public class DasarString {
public static void main(String[] args) {
String nama = "Budi";
String kota = new String("Bandung");
System.out.println("Panjang nama : " + nama.length());
System.out.println("Karakter pertama : " + nama.charAt(0));
System.out.println("Karakter terakhir: " + nama.charAt(nama.length() - 1));
String sapaan = "Halo, " + nama + " dari " + kota + "!";
System.out.println(sapaan);
String gabung = nama.concat(" Santoso");
System.out.println("Hasil concat : " + gabung);
System.out.println("\"1 + 2 = \" + 1 + 2 -> " + "1 + 2 = " + 1 + 2);
System.out.println("\"1 + 2 = \" + (1 + 2)-> " + "1 + 2 = " + (1 + 2));
}
}Output yang Dihasilkan:
Panjang nama : 4
Karakter pertama : B
Karakter terakhir: i
Halo, Budi dari Bandung!
Hasil concat : Budi Santoso
"1 + 2 = " + 1 + 2 -> 1 + 2 = 12
"1 + 2 = " + (1 + 2)-> 1 + 2 = 3Mari kita telaah baris-baris kode di atas:
- Baris 3-4 (
String nama = "Budi";):namamenunjuk literal dari string pool, sedangkankotadibuat lewatnew String(...)dan menempati objek terpisah di heap. Untuk sekarang keduanya dipakai sama saja; perbedaannya baru terasa saat membandingkan dengan==pada Chapter String Comparison. - Baris 6 (
nama.length()): mengembalikan jumlah karakter, yaitu4untuk"Budi". Perhatikan tanda kurung — berbeda denganlengthpada array yang berupa field,length()padaStringadalah method. - Baris 7-8 (
nama.charAt(0)dannama.charAt(nama.length() - 1)): mengambil karakter pada indeks tertentu. Indeks karakter mengikuti konvensi array — dimulai dari0— sehingga karakter terakhir berada di indekslength() - 1, yakni'i'. - Baris 10-11 (operator
+): menggabungkan literal dengan variabel secara berantai. Compiler javac menerjemahkan pola ini menjadi rangkaianStringBuilderdi belakang layar, sehingga penulisannya ringkas. - Baris 13 (
nama.concat(" Santoso")): method alternatif penggabung. Hasilnya"Budi Santoso"—concatmengembalikan String baru dan sama sekali tidak mengubahnama, pratinjau sifat immutable yang kita bahas di chapter berikutnya. - Baris 15-16 (urutan evaluasi
+): operator+dievaluasi dari kiri ke kanan. Pada baris 15,"1 + 2 = "sudah menjadi String sehingga1dan2diubah menjadi teks lalu ditempel, menghasilkan12. Tanda kurung pada baris 16 memaksa penjumlahan numerik dulu sehingga hasilnya3.
Karakter Escape dalam Literal #
Teks kadang memuat karakter yang tidak bisa ditulis langsung. Java menyediakan escape sequence dengan garis miring terbalik: \n untuk baris baru, \t untuk tab, \" untuk tanda kutip ganda di dalam literal, \\ untuk garis miring terbalik itu sendiri, dan \uXXXX untuk karakter Unicode berkode heksadesimal tersebut. Contoh praktisnya sudah kita lihat pada chapter-array sebelumnya ketika mencetak label berformat; cukup tulis "Baris pertama\nBaris kedua" untuk teks dua baris dalam satu literal.
Dengan kemampuan membuat dan menggabungkan String, pertanyaan berikutnya muncul alami: mengapa nama.concat(" Santoso") di atas tidak mengubah isi nama? Jawabannya bersifat fundamental — String dirancang immutable, tidak bisa diubah setelah dibuat — dan konsekuensinya luas bagi cara kita menulis kode.
Referensi #
- Oracle: Class String
- Java Language Specification: Lexical Structure (String Literals)
- dev.java: Learn Java
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
DasarString.java
Unduh berkaspublic class DasarString {
public static void main(String[] args) {
String nama = "Budi";
String kota = new String("Bandung");
System.out.println("Panjang nama : " + nama.length());
System.out.println("Karakter pertama : " + nama.charAt(0));
System.out.println("Karakter terakhir: " + nama.charAt(nama.length() - 1));
String sapaan = "Halo, " + nama + " dari " + kota + "!";
System.out.println(sapaan);
String gabung = nama.concat(" Santoso");
System.out.println("Hasil concat : " + gabung);
System.out.println("\"1 + 2 = \" + 1 + 2 -> " + "1 + 2 = " + 1 + 2);
System.out.println("\"1 + 2 = \" + (1 + 2)-> " + "1 + 2 = " + (1 + 2));
}
}