在下面的代码片段中,我有两个变量firstString
和secondString
,它们具有相同的值“Hello”。所以两个变量的引用位置是相同的。
var firstString = "Hello";
var secondString = "Hello";
bool isSameReference = Object.ReferenceEquals(firstString, secondString);
//same reference for both variables
但是将 secondString
值更新为 "Hey" 不会更新 firstString
,即使它引用相同的位置。为什么这些引用相同引用位置的变量没有得到更新?
secondString = "Hey..";
isSameReference = Object.ReferenceEquals(firstString, secondString);
//reference changed but firstString not updated
将 secondString
更新为之前的值,如 “Hello” 使引用相同。
secondString = "Hello";
isSameReference = Object.ReferenceEquals(firstString, secondString);
//now the reference for both variables are same
为什么 c# 有这种行为以及 frmaework 内部如何处理这种情况?提前致谢
最佳答案
这个过程称为实习。您可以阅读有关字符串实习的更多信息 there 。当分配与现有字符串完全相同的新字符串时,这可以节省一些空间和处理时间。此外,刺痛实习使字符串比较变得微不足道。这是可能的,因为 String
是不可变类型。
关于c# - 对象引用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575684/