[英]Strings Immutability
有人告訴我不能更改Java中的字符串。下面的代碼呢?
name="name";
name=name.replace('a', 'i');
它不更改name
字符串嗎? 另外,replace()的實現在哪里; 相比於(); 等於(); 提供? 我只是在這里使用這些功能,但實際上在哪里實現?
這是將引用變量(名稱)與它所引用的String對象(“名稱”)混淆的經典案例。 它們是兩種截然不同的野獸。 字符串從不改變(忽略反射類型的亂碼),但是引用變量可以根據需要引用盡可能多的不同字符串。 您會注意到,如果您剛剛打電話
name.replace('a', 'i');
什么都沒發生。 僅當您將名稱變量分配給另一個String(由replace
方法返回)時,您才能看到更改。
如果您的代碼是name="name"; name.replace('a', 'i'); //assignment to String variable name is neglected System.out.print(name)
name="name"; name.replace('a', 'i'); //assignment to String variable name is neglected System.out.print(name)
輸出: name
這是因為name.replace('a','i')
會將替換后的字符串nime
放在字符串池中,但引用未指向String變量名。
每當您嘗試修改字符串對象時,
java檢查,結果字符串是否在字符串池中可用
如果可用,則將可用字符串的引用指向字符串變量
否則,將在字符串池中創建新的字符串對象,並將創建對象的引用指向字符串變量。
嘗試一下,自己看看吧:
String name = "name";
String r = name.replace( 'a', 'i' );
System.out.println( name );// not changed
System.out.println( r ); // new, different string
如果將新的引用分配給r,則原始對象不會更改。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.