str
bir nesne değil, bir nesneye referanstır. "Hello"
ve "Help!"
iki ayrı String
nesnedir. 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 - dizes1
s2
"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. s2
başlangıçta s1
işaret etmek için ayarladığımız aynı nesneyi gösteriyor. Ayar s1
için "Help!"
sadece değiştirir başvuru yaparken, String
baş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:
oldChar
Geçerli dizede bir veya daha fazla örnek varsa , geçerli dizenin tüm örneklerinin oldChar
yerini aldığı bir kopyasını oluşturun newChar
.
- Eğer
oldChar
geçerli dize bulunmaz, güncel dize döndürür.
Evet, "Mississippi".replace('i', '!')
yeni bir String
nesne 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.