说,我有一个名为
的字符串string sample = "Initial value";
传递给方法测试()
public static void Test(string testString)
{
testString = "Modified Value";
}
如果我在通过测试(样品)后打印'样品',我除了它应该打印“修改值”。
但它的印刷“初始价值”。如果字符串是引用类型,为什么会这样呢?
但同样(预期的逻辑),为对象工作。有人可以请我清楚吗?
答案 0 :(得分:6)
这与string
作为引用类型无关。这是因为参数是按值传递的,而不是通过引用传递的。
如果您修改这样的方法,那么参数将通过引用传递:
public static void Test(ref string testString)
{
testString = "Modified Value";
}
然后sample
将被修改。
有关参数传递的详细信息,请参阅this article。
答案 1 :(得分:2)
那是因为way how CLR passes the params to method。
简单地说:
string sample = "Initial value";
此处sample
变量是指存储在堆中的"Initial value"
字符串实例。
public static void Test(string testString)
{
testString = "Modified Value";
}
在方法中,您修改testString
变量(sample
变量的副本),使其引用堆中的“Modified Value”字符串,使原始sample
变量不受影响。