对象引用行为

Vim*_* CK 2 c# c#-4.0

在下面的代码片段中,我有两个变量firstString,secondString它们保持相同的值"Hello".因此两个变量的引用位置是相同的.

var firstString = "Hello";
var secondString = "Hello";
bool isSameReference = Object.ReferenceEquals(firstString, secondString);
//same reference for both variables
Run Code Online (Sandbox Code Playgroud)

但更新secondString值为"嘿"不会更新firstString,即使它引用相同的位置.为什么这些变量没有得到更新,这引用了相同的参考位置?

secondString = "Hey..";
isSameReference = Object.ReferenceEquals(firstString, secondString); 
//reference changed but firstString not updated
Run Code Online (Sandbox Code Playgroud)

更新secondString为它的前一个值为"Hello"使引用相同.

secondString = "Hello";
isSameReference = Object.ReferenceEquals(firstString, secondString); 
//now the reference for both variables are same
Run Code Online (Sandbox Code Playgroud)

为什么c#有这种行为以及frmaework internaly如何处理这个?提前致谢

Den*_*nko 5

这个过程叫做实习.你可以阅读更多关于那里实习的字符串.这样可以在分配具有与现有内容完全相同的内容的新sting时节省一些空间和处理时间.同样叮咬实习使得字符串比较琐碎操作.这是可能的,因为它String是不可变类型.