0Pricing
Java Academy · Pelajaran

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 String tidak pernah berubah
  • Metode mengembalikan string baru
  • Sifat tidak dapat diubah mendukung keamanan utas, penggunaan kumpulan, dan keamanan
  • Penggabungan dengan + dalam perulangan berkembang dengan buruk
  • StringBuilder adalah 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

  1. Mengapa String Tidak Dapat Diubah
  2. Membangun String dengan StringBuilder
  3. Metode StringBuilder
  4. StringBuilder versus StringBuffer
← Kembali ke Java Academy