在 C# 中,参数传递的方式决定了方法内部对参数的修改是否会影响外部调用。对于 string 类型的参数,C# 使用的是按值传递(pass by value),这意味着在方法内部对 string 参数的重新赋值不会影响外部调用中的原始字符串。
详细解释:
1.按值传递(Pass by Value):
- 对于 string 类型的参数,方法接收的是原始字符串的副本。
- 在方法内部对 string 参数进行重新赋值,只会改变副本的值,而不会改变原始字符串的值。
2.字符串的不可变性:
- string 在 C# 中是不可变的(immutable),这意味着一旦创建,就不能被修改。任何对字符串的操作都会创建一个新的字符串实例。
3.内存空间变化:
- 当你在方法内部重新赋值 string 参数时,会创建一个新的字符串实例。
- 这会占用额外的内存空间来存储新的字符串。
- 原始字符串仍然存在于内存中,直到没有任何引用指向它,才会被垃圾回收器(GC)回收。
代码:
using System;
namespace Test
{
public class Demo
{
public static void Test()
{
string str = "初始字符串";
Console.WriteLine("调用前: " + str);
Fun(str);
Console.WriteLine("调用后: " + str);
}
public static void Fun(string a)
{
a = "新的字符串"; // 重新赋值
Console.WriteLine("方法内: " + a);
}
public static void Main(string[] args)
{
Test();
}
}
}
运行结果:
调用前: 初始字符串
方法内: 新的字符串
调用后: 初始字符串
如何在方法内部改变外部字符串
代码示例
1.返回值:
public static string Fun(string a)
{
a = "新的字符串"; // 重新赋值
return a;
}
public static void Test()
{
string str = "初始字符串";
Console.WriteLine("调用前: " + str);
str = Fun(str);
Console.WriteLine("调用后: " + str);
}
2.使用引用传递(Pass by Reference):
public static void Fun(ref string a)
{
a = "新的字符串"; // 重新赋值
}
public static void Test()
{
string str = "初始字符串";
Console.WriteLine("调用前: " + str);
Fun(ref str);
Console.WriteLine("调用后: " + str);
}
运行结果
调用前: 初始字符串
方法内: 新的字符串
调用后: 新的字符串
来源链接:https://www.cnblogs.com/chenshibao/p/18639468
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容