int a = 1;
string str = "ab";
Console.WriteLine("a is {0},str is {1}", a, str);
int b = a;
a = 2;
string str1 = str;
str = "abc";
Console.WriteLine("b is {0},str1 is {1}", b, str1);
Console.Read();
string str = "ab";
Console.WriteLine("a is {0},str is {1}", a, str);
int b = a;
a = 2;
string str1 = str;
str = "abc";
Console.WriteLine("b is {0},str1 is {1}", b, str1);
Console.Read();
//string 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了,实际是string经过了特殊处理,每次改变值时都会建立一个新的string对象,变量会指向这个新的对象,而原来的还是指向原来的对象,所以不会改变。这也是string效率低下的原因,如果经常改变string的值则应该使用StringBuilder而不使用string
在你给出的例子当中,我们单独来看关于string的那部分代码:
string str = "ab";
string str1 = str;
str = "abc";
str1 = ?
在这里str1的值还是ab,因为string对象是不可变的,包括长度和其中任何字符都是不可以改变的。
虽然string是引用类型,但它是一种特殊的引用类型,每次使用string时,都要在内容中创建一个新的内存对象,即为该新对象分配新的,所以它的赋值可以按照值类型的赋值来处理。