String s = "hello";
String backup_of_s = s;
s = "bye";
Bu noktada, yedekleme değişkeni hala orijinal "merhaba" değerini içerir (bunun nedeni String'in değişmezlik hakkıdır?).
Ancak Dizeleri bu yöntemle kopyalamak gerçekten güvenli mi (elbette düzenli değiştirilebilir nesneleri kopyalamak güvenli değildir) veya bunu yazmak daha mı iyidir? :
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
Başka bir deyişle, bu iki parçacık arasındaki (varsa) fark nedir?
EDIT - ilk snippet'in güvenli olmasının nedeni:
Önceden verilen iyi cevaplara dayanarak (biraz daha ayrıntılı olarak açıklayayım) (esasen 2 snippet arasındaki performans farkı sorununa odaklandı):
Dizeler Java'da değiştirilemez, yani bir String nesnesinin yapıldıktan sonra değiştirilemeyeceği anlamına gelir. Bu nedenle,
String s = "hello";yeni bir String örneği oluşturur ve adresini atar s( sörneğe / nesneye başvuru olarak)
String backup_of_s = s;yeni bir değişken oluşturur backup_of_sve o anda başvurduğu nesneye referans verecek şekilde onu başlatır s.
Not: Dize değişmezliği, bu nesnenin değiştirilmeyeceğini garanti eder: yedeklememiz güvenlidir
Not 2: Java çöp toplama mekanizması, bu nesnenin en az bir değişken tarafından başvurulduğu sürece yok edilmeyeceğini garanti eder ( backup_of_sbu durumda)
Son olarak, s = "bye";başka bir String örneği oluşturur (değişmezlik nedeniyle, tek yol budur) ve sdeğişkeni, şimdi yeni nesneye başvuracak şekilde değiştirir .