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也会引用同一个对象吗?
谢谢,
是的,您是对的,仅复制引用,引用的对象实例是一个且相同的。
您可以使用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)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |