C# 中的 String 是一种引用类型,但它重写了==, 和Equals()来比较字符串的值。有没有办法检查两个字符串是否确实是同一实例并指向同一内存?
EvenObject.ReferenceEquals("A", "A")会返回 true,因为它只是调用==.
这个测试将会通过。所以仍在等待检查是否相同的实例。
[Test]
public void TestString()
{
var a = "A";
var b = "A";
var c = a;
Assert.IsTrue((object)a == (object)b);
Assert.IsTrue(ReferenceEquals(a,b)); //It is same as objA == objB
Assert.IsTrue(Object.ReferenceEquals(a,b));
Assert.AreEqual(a,b);
Assert.AreSame(a, b);
unsafe
{
TypedReference tra = __makeref(a);
IntPtr ptra = (IntPtr)(&tra);
TypedReference trb = __makeref(b);
IntPtr ptrb = (IntPtr)(&trb);
Assert.AreNotEqual(ptra, ptrb);
Assert.AreNotSame(ptra, ptrb);
TypedReference trc = __makeref(c);
IntPtr ptrc = (IntPtr)(&trc);
Assert.AreNotEqual(ptra, …Run Code Online (Sandbox Code Playgroud)