string a = "a";
string b = a;
string a = "c";
Run Code Online (Sandbox Code Playgroud)
为什么字符串b仍然具有值"a"而不是"c"?
由于string是一个对象而不是堆栈值类型,这种行为是什么?
谢谢
Ant*_*ram 27
你把变量指向一个新的东西,它与你说的没什么不同
Foo a = new Foo();
Foo b = a;
a = new Foo();
// a no longer equal to b
Run Code Online (Sandbox Code Playgroud)
在此示例中,b指向a最初引用的内容.通过更改值a,a并且b不再引用内存中的同一对象.这与使用a和b的属性不同.
Foo a = new Foo();
Foo b = a;
a.Name = "Bar";
Console.WriteLine(b.Name);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"酒吧"被写入到屏幕,因为a和b仍然引用同一个对象.
Eri*_*ert 21
首先让我说你对变量和数据的选择很差.这使得某人很难说"你的例子中的字符串a ......"因为"a"可能是字符串的内容,或者是包含引用的变量.(它很容易与不定冠词'a'混淆.)
此外,您的代码无法编译,因为它声明变量"a"两次.如果您以一种让他们能够明确回答问题的方式提出问题,您可能会得到更好的答案.
让我们重新开始吧.
我们有两个变量和两个字符串文字.
string x = "hello";
string y = x;
x = "goodbye";
Run Code Online (Sandbox Code Playgroud)
现在的问题是"为什么y等于'你好'而不是'再见'"?
让我们回到基础.什么是变量?变量是存储位置.
字符串类型的值是什么?字符串类型的值是对字符串数据的引用..
什么是字符串类型的变量?把它放在一起.string类型的变量是一个存储位置,它保存对字符串数据的引用.
那么,什么是x?存储位置.它的第一个价值是什么?对字符串数据"hello"的引用.
你是什么?存储位置.它的第一个价值是什么?字符串数据"hello"的引用,与x相同.
现在我们改变存储位置x的内容以引用字符串数据"goodbye".存储位置y的内容不变; 我们没有设定y.
合理?
为什么字符串对象引用不像其他对象引用?
我否认这个问题的前提.String对象裁判都表现得像其他物体裁判.你能举例说明他们不在哪里吗?