在下面的代码中,我正在检查对象引用的相等性。
string x = "Some Text";
string y = "Some Other Text";
string z = "Some Text";
Console.WriteLine(object.ReferenceEquals(x, y)); // False
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // False
y = "Some Text";
Console.WriteLine(object.ReferenceEquals(x, y)); // True
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // True
这里:
x
和z
引用同一个对象;我可以说x
是内部化的,而z
则使用了那个版本。嗯,我不确定这是否正确;如果我错了,请纠正我。- 我通过将与
x
相同的值分配给y
来更改了y
的值。我认为它会在这里创建一个新对象;但是我错了,它使用了相同的引用。
我的问题是:
.net
是否对我使用的每个字符串都使用字符串内部化?- 如果是,那么这难道不会影响性能吗?
- 如果不是,那么以上示例中引用是如何变成相同的?