c#中分为值类型和引用类型.前面已经说过,说明下引用类型,如
Employee ee1 = new Employee();
Employee ee2 = ee1;
特别说明:
字符串在C#中是引用类型
class MyClass
{
static void Main()
{
string s1 = "hello";
string s2 = s1;
s1 = "world";
System.Console.WriteLine("s1:{0}/ns2:{1}",s1,s2);
}
}
你觉得运行结果是什么?是不是s2应该随s1一起变.
运行结果为
s1:world
s2:hello
字符串是引用类型,为什么会出现这样的结果.MSDN上这样解释:
字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。
因此,上例中,string s2=s1;语句将会使s1 ,s2指向同一内存位置.如果改变s1(s1="world"),原来的"hello"并不会改变,只是会创建新的字符串对象"world",s1对其引用.
附个MSDN上的例子:
string s1 = "orange";string s2 = "red";s1 += s2;System.Console.WriteLine(s1); // outputs "orangered"s1 = s1.Substring(2, 5);System.Console.WriteLine(s1); // outputs "anger"
示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,
包含 "orange" 和 "red" 的两个字符串均保持不变。
+= 运算符会创建一个包含组合内容的新字符串。
结果是 s1 现在引用一个完全不同的字符串。只包含 "orange" 的
字符串仍然存在,但连接 s1 后将不再被引用。
因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 StringBuilder 类执行