String类型如何传递给方法或分配给C#中的变量?

The*_*ght 5 c# string operators parameter-passing variable-assignment

使用==和!=运算符时,String对象的行为类似于Value类型,这意味着检查实际对象而不是引用.

参数传递,分配和复制怎么样?

字符串参数传递: 将引用类型传递给方法时,将复制其引用,但基础对象保持不变.

关于C#中的String类型也是如此吗?我的意思是有2个指针(messageVar和messageParam)指向下面代码中的同一个对象:

public static void main()
{
   string messageVar = "C#";
   Test(messageVar);

   // what about in assignement?
   string messageVar2 = messageVar;
}
public void Test(string messageParam)
{
// logic
}
Run Code Online (Sandbox Code Playgroud)

什么时候分配给变量?我猜,只能复制引用,并且实际对象在String Intern Pool中保持相同的状态.不确定.

messageVar2也会引用同一个对象吗?

谢谢,

Bro*_*ass 3

是的,您是对的,仅复制引用,引用的对象实例是一个且相同的。

您可以使用Object.ReferenceEquals()测试两个引用是否指向同一个对象实例来轻松验证这一点 - 我对您的示例进行了一些修改以显示这一点:

static string messageVar = "C#";
public static void Main(string[] args)
{
    bool isSame = Test(messageVar); //true

    // what about in assignement?
    string messageVar2 = messageVar;
    isSame = Object.ReferenceEquals(messageVar2, messageVar);//also true
}

public static bool Test(string messageParam)
{
    // logic
    bool isSame = Object.ReferenceEquals(messageParam, messageVar);
    return isSame;
}
Run Code Online (Sandbox Code Playgroud)