查看: 11|回覆: 0

如何理解值传递的原理,string类型

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2012-2-3
發表於 2025-6-22 22:20:00 | 顯示全部樓層 |閲讀模式

在 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
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部