字符串在20121215项目中
字符串是不可变的
字符串的恒定性
对象中的Equals方法比较的时地址,而在字符串中比的是字符串的内容
字符串拘留池
创建字符串之前会先在字符串拘留池找,如果找到,则会指向找到的字符串,没有则新建一个,如果是通过变量相加则会直接新建字符串。
如果直接赋值创建字符串的鱼通过变量相加的字符串相同也不会指向通过变量相加的字符串,因为通过变量相加的字符串是随时可变的
//字符串是不可变的。
//字符串的恒定性...
string str1 = "刘德华";
string str2 = "刘德华";
string str3 = "刘" + "德华";
string str4 = "张学友";
string str5 = "刘";
string str6 = "德华";
string str7 = str5 + str6;
string str8 = "刘德华";
Console.WriteLine(str2.Equals(str1));
Console.WriteLine(str2.Equals(str4));
Console.WriteLine(str2.Equals(str7));
//对象的地址 而在字符串的Equals比的是字符串中的内容...
Console.WriteLine(str1.Equals(str3));
bool b = string.ReferenceEquals(str2, str8);
Console.WriteLine(b);
string str = "1";
Test(str);
Console.WriteLine(str);
Console.ReadKey();
}
static void Test(string str)
{
str = " ihao";
}
StringBuilder
1 Stopwatch watch = new Stopwatch();//秒表 2 3 watch.Start(); 4 5 string str = ""; 6 7 for (int i = 0; i < 10001; i++) 8 9 { 10 11 str += i; 12 13 } 14 15 watch.Stop(); 16 17 Console.WriteLine(watch.ElapsedMilliseconds);//124 18 19 20 21 22 23 StringBuilder sb = new StringBuilder(); 24 25 //向现有的sb对象追加内容 26 27 sb.Append("ewew"); 28 29 Stopwatch watchs = new Stopwatch();//秒表 30 31 watchs.Start(); 32 33 for (int i = 0; i < 10001; i++) 34 35 { 36 37 sb.Append(i); 38 39 } 40 41 watchs.Stop(); 42 43 Console.WriteLine(watchs.ElapsedMilliseconds);//1 44 45 //StringBuilder在大批量的字符串拼接下 原因就是string的每次拼接的时候 都会创建一个对象 而StringBuilder不会 46 47 StringBuilder sba = new StringBuilder(); 48 49 sba.Append("sdd");//在原来的基础上追加 50 51 sba.AppendFormat("{0}",1);//挖坑 填坑 52 53 Console.WriteLine(sba.ToString()); 54 55 sba.AppendLine("sadad");//追加字符串 并在末尾追加一个换行符 56 57 sba.Append("sddsadadada"); 58 59 60 61 Console.WriteLine(sba.ToString()); 62 63 Console.WriteLine(sba.Capacity);//数组的容量 64 65 //sb.Length //字符个数 66 67 //StringBuilder不是String