0

我有一个字符串:

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

我将此字符串分配给两个变量,例如:

str1=str
str2=str

在我做了以下操作后:

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

我得到str1D_projects_myown_javastr2是一样的。为什么会这样?我不想str2改变它的价值。

4

2 回答 2

5

str1并且str2只是对 的引用str,字符串不会复制到这些变量中。并String#gsub!更新字符串。

如果你想保持str2完整,你需要这样做:

str2 = str.dup

或者

str2 = str.clone

此外,如果您使用String#gsub而不是String#gsub!,str并且str2不会更改。

于 2012-12-12T11:22:56.503 回答
1

有关更多信息,您可能还想阅读浅拷贝和深拷贝,这里有一个解释这个概念的维基百科链接: 在此处输入链接描述

另外,我想补充一下,'!通常标识所谓的“爆炸方法”。这些方法最终会改变它们被调用的变量的状态。

此链接涉及 bang 方法,实际上有一个与您描述的问题非常相似的示例: 在此处输入链接描述

希望这可以帮助

于 2012-12-13T01:37:09.053 回答