2012-12-12 139 views
0

的實例,我有一個字符串:修改字符串

str="D\\projects\\myown\\java" 

我分配這個字符串兩個變量,如:

str1=str 
str2=str 

我做了以下操作後:

idgb1=str1.gsub!("\\","_") 

我得到str1D_projects_myown_javastr2是一樣的。爲什麼會發生?我不希望str2更改其值。

回答

5

str1str2只是對str的引用,字符串不會複製到這些變量。 String#gsub!更新了字符串。

如果你想保持str2完好,你需要做的是這樣的:

str2 = str.dup 

str2 = str.clone 

此外,如果您使用,而不是String#gsubString#gsub!strstr2不會被改變。

+1

感謝醃好。它的工作。 –

1

你可能也想在淺VS深層副本讀了進一步的信息,這裏一個維基百科的鏈接,解釋概念: enter link description here

而且除此之外,我想補充的是,「!」通常識別出所謂的「爆炸方法」。這些方法最終會改變它們被調用的變量的狀態。

此鏈接觸及爆炸的方法和實際上有一個例子非常相似,您所描述的問題: enter link description here

希望這有助於