在《C#本质论》中看到
由于引用类型只复制数据的地址,因此两个变量可以引用相同数据。除此之外,利用其中一个变量来更改变量,也会更改另一个变量引用的数据。无论赋值还是方法调用,这一点都是成立的。换言之,在一个方法的内部修改引用类型的数据,在调用者那里也会发生同样的改动。就试着写了这些代码 string sa = "我操";
string sb = sa;
Console.WriteLine(sa);
Console.WriteLine(sb);
sa = "我操2012";
Console.WriteLine(sa);
Console.WriteLine(sb);
Console.ReadLine();可是输出的是
我操
我操
我操2012
我操所以说最后一个并没有变成我操2012呀,是我理解错了吗?
由于引用类型只复制数据的地址,因此两个变量可以引用相同数据。除此之外,利用其中一个变量来更改变量,也会更改另一个变量引用的数据。无论赋值还是方法调用,这一点都是成立的。换言之,在一个方法的内部修改引用类型的数据,在调用者那里也会发生同样的改动。就试着写了这些代码 string sa = "我操";
string sb = sa;
Console.WriteLine(sa);
Console.WriteLine(sb);
sa = "我操2012";
Console.WriteLine(sa);
Console.WriteLine(sb);
Console.ReadLine();可是输出的是
我操
我操
我操2012
我操所以说最后一个并没有变成我操2012呀,是我理解错了吗?
string s = "a";
s = "b";
事实上是
string s = "a";
s = new string("b"); //你永远不能更改一个string,你的更改只是让它指向一个新的对象。
正如cao版主所说, sa = "我操2012";//你给sa赋值只是让他指向一个新的对象。但是sb没变。
又另外建立了一个对象吧
跟sb已经不是同一个了
比如 两个字符串用+号相加,你知道是怎么+的么?弄清楚了这个问题也可以搞清楚。
你可以把两个Object用+号加起来咩。
public class String
{
private string value;
public static implicit operator String(string value) { return new String { value = value }; }
public override string ToString()
{
return value;
}
}
String sa = "我操";
String sb = sa;
Console.WriteLine(sa);
Console.WriteLine(sb);
sa = "我操2012";
Console.WriteLine(sa);
Console.WriteLine(sb);
Console.ReadLine();
关键的问题是楼主把 变量 与 变量的成员 搞混淆了。
String sa = "我操";
String sb = sa;
Console.WriteLine(sa);
Console.WriteLine(sb);
sa = "我操2012";
String sb = sa;
Console.WriteLine(sa);
Console.WriteLine(sb);
Console.ReadLine();
这样就行了