String s = "hello";
String backup_of_s = s;
s = "bye";
Pada titik ini, variabel cadangan masih berisi nilai asli "halo" (ini karena kekekalan String kan?).
Tetapi apakah benar - benar aman untuk menyalin Strings dengan metode ini (yang tentu saja tidak aman untuk menyalin objek yang bisa berubah-ubah), atau lebih baik untuk menulis ini? :
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
Dengan kata lain, apa bedanya (jika ada) antara kedua cuplikan ini?
EDIT - alasan mengapa cuplikan pertama aman:
Izinkan saya menjelaskan hal-hal dengan sedikit lebih detail, berdasarkan jawaban baik yang sudah disediakan (yang pada dasarnya berfokus pada pertanyaan tentang perbedaan kinerja antara 2 cuplikan):
String tidak dapat diubah di Jawa, yang berarti bahwa objek String tidak dapat dimodifikasi setelah konstruksinya. Karenanya,
String s = "hello";membuat instance String baru dan memberikan alamatnya s( smenjadi referensi ke instance / objek)
String backup_of_s = s;membuat variabel baru backup_of_sdan menginisialisasi sehingga referensi objek saat ini dirujuk oleh s.
Catatan: String immutability menjamin bahwa objek ini tidak akan diubah: cadangan kami aman
Catatan 2: Mekanisme pengumpulan sampah Java menjamin bahwa objek ini tidak akan dihancurkan asalkan direferensikan oleh setidaknya satu variabel ( backup_of_sdalam hal ini)
Akhirnya, s = "bye";buat instance String lain (karena ketidakmampuan, itu satu-satunya cara), dan memodifikasi svariabel sehingga sekarang referensi objek baru.