Apa Itu String
String menyimpan urutan karakter, yaitu teks seperti nama, kalimat, atau satu baris yang dibaca dari file. Kamu sudah melihat String di daftar tipe referensi di halaman sebelumnya; di sini kamu akan benar-benar memakainya. Literal string ditulis dengan tanda kutip dua (tanda kutip satu khusus untuk satu char):
name.length() mengembalikan jumlah karakter, yaitu 3 untuk "Ada". Karena ini pemanggilan method, tanda kurungnya wajib ditulis.
Menggabungkan String
Operator + menempelkan string. Kalau salah satu sisi + adalah string, sisi lainnya otomatis diubah menjadi teks, jadi kamu bisa mencampurnya dengan angka dan boolean tanpa kerja tambahan:
Satu jebakan: karena + bekerja dari kiri ke kanan, "" + 1 + 2 menghasilkan "12" (string + int, lalu string + int), tetapi 1 + 2 + "" menghasilkan "3" (dua int dijumlahkan dulu, baru menjadi teks). Kalau ragu, bungkus perhitungannya dengan tanda kurung.
String Bersifat Immutable
Inilah hal paling penting yang perlu dipahami tentang string di Java: String tidak pernah berubah setelah dibuat. Setiap method yang "mengubah" string sebenarnya mengembalikan string yang benar-benar baru dan membiarkan aslinya tidak tersentuh. Jadi kalau kamu lupa menyimpan nilai kembaliannya, tidak terjadi apa-apa:
Panggilan pertama menghitung "HELLO" lalu langsung membuangnya. Hanya baris kedua, yang menyimpan hasilnya kembali ke s, yang punya efek terlihat. Hampir semua orang pernah terjebak di sini.
Membandingkan String
Pakai .equals() untuk membandingkan isi dua string. Memakai == adalah kesalahan pemula yang klasik: == bertanya "apakah ini objek yang sama di memori?", bukan "apakah teksnya sama?":
a == b bernilai false di sini karena new String(...) memaksa pembuatan objek terpisah. Selalu bandingkan nilai string dengan .equals() (atau .equalsIgnoreCase() untuk mengabaikan huruf besar dan kecil). Trik praktis untuk menghindari crash saat salah satu sisi mungkin null adalah memanggil .equals pada literalnya: "yes".equals(input) tidak pernah melempar exception walaupun input bernilai null.
Method String Sehari-hari
Karena string bersifat immutable, setiap method ini mengembalikan string baru (atau sebuah nilai) alih-alih mengubah aslinya. Inilah method yang akan sangat sering kamu pakai:
Perhatikan chaining-nya: s.trim().toUpperCase() bisa berjalan karena trim() mengembalikan string, yang lalu kamu panggil toUpperCase()-nya. substring adalah andalan lainnya: method ini menerima indeks awal (termasuk) dan indeks akhir opsional (tidak termasuk):
Indeks dimulai dari nol, jadi substring(0, 4) mengambil karakter 0 sampai 3. Meminta indeks yang melewati ujung string akan melempar StringIndexOutOfBoundsException, salah satu exception runtime yang bisa kamu antisipasi. Perhatikan juga bahwa split(",") di atas memberimu array, yang length-nya adalah field tanpa tanda kurung, berbeda dengan method .length() pada string.
Membangun String di Dalam Loop
Menggabungkan dengan + tidak masalah untuk beberapa potong teks, tetapi melakukannya di dalam loop yang besar itu lambat, karena setiap + membuat string baru dan menyalin semuanya. Saat menyusun teks di dalam loop, pakai StringBuilder, yang mengubah buffer di tempat dan menghasilkan string akhirnya sekali saja di akhir:
append mengembalikan builder yang sama, jadi panggilannya bisa dirangkai. Panggil .toString() untuk mendapatkan String biasa di akhir. Untuk penggabungan sekali jalan, tetap pakai +; untuk mengumpulkan banyak potongan, StringBuilder adalah alat yang tepat.
Berikutnya: String Format
Penggabungan jadi berantakan begitu kamu butuh kolom yang sejajar, jumlah angka desimal yang tetap, atau angka dengan padding. String.format dan printf di Java memakai template dengan placeholder % untuk menangani semua itu dengan rapi, dan itulah topik halaman berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara membandingkan dua string di Java?
Pakai .equals() untuk membandingkan isi: a.equals(b) mengembalikan true kalau karakternya sama. Jangan pakai == untuk membandingkan nilai string, karena == membandingkan referensi objek, sehingga bisa mengembalikan false untuk dua string yang berisi teks yang sama. Pakai .equalsIgnoreCase() kalau huruf besar dan kecil tidak perlu dibedakan.
Kenapa string di Java bersifat immutable?
Setelah dibuat, objek String tidak pernah bisa berubah. Method seperti replace atau toUpperCase mengembalikan string baru alih-alih mengubah aslinya. Sifat immutable membuat string aman untuk dipakai bersama dan disimpan di cache, tetapi artinya kamu harus menyimpan hasilnya: s = s.toUpperCase();. Kalau kamu memanggil method lalu mengabaikan nilai kembaliannya, tidak terjadi apa-apa.
Bagaimana cara mendapatkan panjang string di Java?
Panggil method .length(): "hello".length() mengembalikan 5. Perhatikan bahwa pada String ini adalah method dengan tanda kurung, berbeda dengan array yang length-nya adalah field tanpa tanda kurung (arr.length).