都说string类型是引用类型,但是我一直想不通为何当我声明两个变量 string a1,a2; a1=“100”; a2=a1; a1=“200”当我输出a2的值时并没有根据“引用类型”的赋值是赋值内存地址的说法而改变a2的值,这令我百思不得其解,当我看到一篇文章中所说的如下:
static void Main( string [] args) { string str = " string " ;Change(str);Console.WriteLine(str);}static void Change( string str) {str = " Changed " ;}
方法传递的参数是原内容的拷贝,其过程如果用图可表示为:
语句str=”Changed”之前
语句str=”Changed”之后
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
namespace TCP { public class Program {public class User { private string _name; private string _age; public User(string name, string age) { _name = name; _age = age; } public string name { get { return _name; } set { _name = value; } } public string age { get { return _age; } set { _age = value; } } }}public static void editUser(User user, StringBuilder str,string code) { code = "VB.NET"; str = str.Remove(0, 1); str.Append("E"); user.name = "LEE"; user.age = "10"; }static void Main(string[] args) { string code = "C#"; User user = new User("Li","23"); StringBuilder str = new StringBuilder(); str.Append("A"); editUser(user, str,code); Console.WriteLine(code); Console.WriteLine(str); Console.WriteLine(user.name); Console.WriteLine(user.age); Console.ReadLine(); }}
上面代码输如下: