strbir nesne değil, bir nesneye referanstır. "Hello"ve "Help!"iki ayrı Stringnesnedir. Böylece, str işaret bir dize. Sen ne değiştirebilir işaret o değil olanı, işaret .
Bu kodu alın, örneğin:
String s1 = "Hello";
String s2 = s1;
// s1 and s2 now point at the same string - "Hello"
Şimdi, bunun değerini etkileyecek 1 yapabileceğimiz hiçbir şey yok . Aynı nesneye atıfta bulunurlar - dizes1s2"Hello" - ancak bu nesne değişmezdir ve bu nedenle değiştirilemez.
Eğer böyle bir şey yaparsak:
s1 = "Help!";
System.out.println(s2); // still prints "Hello"
Burada bir nesneyi değiştirip referansı değiştirme arasındaki farkı görüyoruz. s2başlangıçta s1işaret etmek için ayarladığımız aynı nesneyi gösteriyor. Ayar s1için "Help!"sadece değiştirir başvuru yaparken, Stringbaşlangıçta değişmeden kalıntıları sevk nesne.
Dizeleri ise olduğumuzu değişken, biz böyle bir şey yapabileceğini:
String s1 = "Hello";
String s2 = s1;
s1.setCharAt(1, 'a'); // Fictional method that sets character at a given pos in string
System.out.println(s2); // Prints "Hallo"
OP'nin düzenlemesine yanıt vermek için düzenleyin:
Eğer bakarsak String.Replace için kaynak kodu (Char, char) - Bunu görebiliyorum (JDK kurulum dizinindeki src.zip da mevcuttur yanlısı bir ipucu şey gerçekten nasıl çalıştığını merak zaman orada bakmaktır) Ne yapar şudur:
oldCharGeçerli dizede bir veya daha fazla örnek varsa , geçerli dizenin tüm örneklerinin oldCharyerini aldığı bir kopyasını oluşturun newChar.
- Eğer
oldChargeçerli dize bulunmaz, güncel dize döndürür.
Evet, "Mississippi".replace('i', '!')yeni bir Stringnesne yaratır . Yine, aşağıdakiler geçerlidir:
String s1 = "Mississippi";
String s2 = s1;
s1 = s1.replace('i', '!');
System.out.println(s1); // Prints "M!ss!ss!pp!"
System.out.println(s2); // Prints "Mississippi"
System.out.println(s1 == s2); // Prints "false" as s1 and s2 are two different objects
Şimdilik ödeviniz değiştirirseniz yukarıdaki kodun ne yaptığını görmek s1 = s1.replace('i', '!'); hiç s1 = s1.replace('Q', '!');:)
1 Aslında, bir mutasyona dizeleri (ve diğer sabit nesneler) mümkün. Yansıma gerektirir ve çok, çok tehlikelidir ve programı gerçekten yok etmekle ilgilenmediğiniz sürece asla kullanılmamalıdır.