【发布时间】:2016-11-17 16:31:52
【问题描述】:
string 是引用类型,但作用类似于值类型。
string a,b;
a=b="test"; //As i understood a and b have to point to the same location in the heap
a="a";
Console.WriteLine("a: {0}, b: {1}",a,b);
结果它打印出 a: a, b: test
请解释为什么对a 所做的更改没有反映在b 上,正如根据引用类型规则可以预期的那样。
【问题讨论】:
-
我认为你的理解是错误的。
a和b是它们自己的变量,因此是它们自己的值。您正在考虑的是参考类型。这些是值类型。此外,字符串是不可变的,这意味着当它们改变时,它们会改变整个事物。 -
您的问题与值类型与引用类型无关。
a和b是不同的变量,因此分配给一个变量不会影响另一个变量。 -
@RichardBarker 你错了,引用类型和值类型都会出现这种行为。字符串也不是值类型。最后,您所说的关于 Immutable 的内容有点模棱两可,Immutable 的意思是您所做的任何更改都会返回一个带有更改的新对象,但原始对象未修改,如果要使用新对象,则必须用新对象覆盖变量对象。
-
感谢指正。
-
除了
string是不可变的事实之外,a="a";正在为变量分配一个新的对象引用,而不是试图改变变量指向的对象。