using System;
class Test
{
public static void Main()
{
string s1 = "hello";
string s2 = s1;
Console.WriteLine(s1);
Console.WriteLine(s2);
s1 = "world";
Console.WriteLine(s1);
Console.WriteLine(s2);
}
}
/*
hello
hello
world
hello
*/
解释:
(1)s1="hello"; 执行的是在堆中创建了一个String类型的对象,将这个对象的地址赋给s1。
(2)s2=s1; 执行的是将"hello"对象的地址也赋给了s2。
(3)s1="world"; 实质上并不会去改变"hello"这个对象,它改变的是s1指向的地址,而不是它原来指向对象的内容。
Ps.其他引用类型也是如此。