Mengapa String Tidak Dapat Diubah
Pahami ketidakberubahan string
Mengapa String Tidak Dapat Diubah adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
String Tidak Dapat Diubah
Dalam Java, String bersifat tidak dapat diubah: setelah dibuat, karakternya tidak akan pernah berubah. Metode apa pun yang tampak mengubah string sebenarnya mengembalikan string baru.
Metode Mengembalikan String Baru
toUpperCase(), replace(), dan metode sejenisnya tidak mengubah nilai asli. Metode-metode tersebut menghasilkan String baru dan membiarkan nilai asli tetap utuh.
public class Main {
public static void main(String[] args) {
String original = "hello";
String upper = original.toUpperCase();
System.out.println("original: " + original);
System.out.println("upper: " + upper);
}
}Penetapan Ulang Bukan Mutasi
Saat Anda menulis s = s + "!", variabel tersebut kini menunjuk ke string baru. Objek string lama tidak berubah dan dapat dikumpulkan oleh pengumpul sampah.
public class Main {
public static void main(String[] args) {
String s = "hi";
String firstRef = s;
s = s + "!";
System.out.println("s: " + s);
System.out.println("firstRef: " + firstRef);
}
}Mengapa Tidak Dapat Diubah?
Sifat tidak dapat diubah memberikan manfaat nyata:
- Keamanan utas: string dapat digunakan bersama tanpa kunci
- Penyimpanan dalam tembolok: kode hash dan entri kumpulan string tetap valid
- Keamanan: string yang diberikan kepada metode tidak dapat diubah secara diam-diam
Kumpulan String
Literal string yang identik dapat menggunakan satu objek bersama dalam kumpulan string. Hal ini aman hanya karena string tidak pernah berubah. Di sini, dua literal merujuk ke objek yang sama dalam kumpulan.
public class Main {
public static void main(String[] args) {
String a = "java";
String b = "java";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}new String Menghindari Kumpulan
Menggunakan new String(...) memaksa pembuatan objek terpisah, sehingga kesetaraan referensinya berbeda meskipun isinya sama. Selalu bandingkan isi menggunakan equals.
public class Main {
public static void main(String[] args) {
String a = "java";
String b = new String("java");
System.out.println("== : " + (a == b));
System.out.println("equals: " + a.equals(b));
}
}Biaya Penggabungan
Setiap penggunaan + pada string membuat objek baru. Jika dilakukan dalam perulangan, cara ini mengalokasikan banyak string berumur pendek sehingga membuang waktu dan memori.
public class Main {
public static void main(String[] args) {
String result = "";
for (int i = 1; i <= 5; i++) {
result = result + i;
}
System.out.println(result);
}
}Pertumbuhan Kuadratik
Karena setiap penggabungan menyalin semua karakter sebelumnya, pembuatan string panjang dengan + dalam perulangan berkembang dengan buruk (kira-kira O(n kuadrat)). Inilah masalah kinerja utamanya.
public class Main {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 1000; i++) {
s += "x";
}
System.out.println("Length: " + s.length());
}
}Nilai yang Tidak Dapat Diubah Bersifat Terprediksi
Memberikan string kepada suatu metode aman: metode tersebut tidak dapat mengubah salinan Anda. Di sini, metode membuat string baru dan nilai milik pemanggil tetap utuh.
public class Main {
static void shout(String s) {
s = s + "!!!";
System.out.println("inside: " + s);
}
public static void main(String[] args) {
String msg = "hello";
shout(msg);
System.out.println("outside: " + msg);
}
}Pratinjau Solusi
Saat perlu membuat string secara efisien, Java menyediakan StringBuilder, kelas pendamping yang dapat diubah. Kelas ini mengubah isi di tempat, bukan mengalokasikan objek baru setiap kali.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
sb.append(i);
}
System.out.println(sb.toString());
}
}Membandingkan Dua Pendekatan
Untuk beberapa penggabungan, + sepenuhnya memadai dan mudah dibaca. Untuk banyak penggabungan dalam perulangan, pilih StringBuilder. Tentukan pilihan berdasarkan banyaknya teks yang perlu Anda buat.
public class Main {
public static void main(String[] args) {
String simple = "a" + "b" + "c";
StringBuilder sb = new StringBuilder("a");
sb.append("b").append("c");
System.out.println(simple);
System.out.println(sb);
}
}Pemeriksaan Singkat
Apa yang sebenarnya terjadi saat Anda memanggil s.toUpperCase() pada sebuah String?
Rangkuman
Anda telah mempelajari alasan string tidak dapat diubah:
- Isi sebuah
Stringtidak pernah berubah - Metode mengembalikan string baru
- Sifat tidak dapat diubah mendukung keamanan utas, penggunaan kumpulan, dan keamanan
- Penggabungan dengan
+dalam perulangan berkembang dengan buruk StringBuilderadalah solusi yang dapat diubah
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengapa String Tidak Dapat Diubah” gratis?
Ya — teks lengkap “Mengapa String Tidak Dapat Diubah” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengapa String Tidak Dapat Diubah”?
Pahami ketidakberubahan string Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mengapa String Tidak Dapat Diubah” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa String Tidak Dapat Diubah
- Membangun String dengan StringBuilder
- Metode StringBuilder
- StringBuilder versus StringBuffer