我有一个字符串:
str="D\\projects\\myown\\java"
我将此字符串分配给两个变量,如:
str1=str
str2=str
我做了以下操作后:
idgb1=str1.gsub!("\\","_")
我将str1
视为D_projects_myown_java
,str2
是相同的。为什么会这样?我不希望str2
更改其值。
答案 0 :(得分:5)
str1
和str2
只是对str
的引用,字符串不会复制到这些变量。并String#gsub!
更新了字符串。
如果你想保持str2
完整,你需要这样做:
str2 = str.dup
或
str2 = str.clone
此外,如果您使用String#gsub
代替String#gsub!
,则不会更改str
和str2
。
答案 1 :(得分:1)
有关更多信息,您可能还想阅读浅层和深层副本,这里有一个维基百科的链接,解释了这个概念: enter link description here
另外,我想补充说,'!'通常会识别所谓的“爆炸方法”。这些方法最终会改变它们被调用的变量的状态。
此链接涉及爆炸方法,实际上有一个与您描述的问题非常相似的示例: enter link description here
希望这有帮助