黑马程序员技术交流社区
标题:
string 和stringBulider
[打印本页]
作者:
徐阳
时间:
2012-9-14 14:08
标题:
string 和stringBulider
StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
另外,对于 String 我们不得不多说几句:
1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)
3.定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)
我想问的是,那这样明显是使用stringBulider更方便,想改就改,但实际中我们用的更多的是string,而不是stringBulider
stringBulider的缺点在哪里呢?
作者:
廖创发
时间:
2012-9-14 18:20
stringBulider的缺点是不能保证线程安全,全追求速度,占用资源少
作者:
希望在明日
时间:
2012-9-14 23:38
个人对string 與stringbuild做个终极小结!!!
1; 不同點,string可以直接用來聲明一個字符串類型 ,但是stringbuild不可以直接聲明,它是一個類,必須用聲明實例的方式才能聲明一個字符類型
如:StringBuild str1 =new StringBuild(“hello,world”);
//聲明一個str1的實例,賦初值為”hello,world”;
2; string與stringbuild均是引用類型,但是也不完全是引用類型,str1直接存放在棧上,而初始化值直接存放在 堆上。但是stringbuild是一個完全引用類型,連定義都與類一致。
但是string 卻不完全是引用類型。
如:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string str1 ="hello,world";
Console.WriteLine(str1);
string str2 =str1;
Console.WriteLine(str2);
str1 = "this is just test";
Console.WriteLine(str1); //再次 輸入的時候就輸出為空了,str1,str2均為空
Console.WriteLine(str2);
Console.ReadLine();
}
}
}
我們會發現,當我們將str1重新賦值的時候,str2并沒有改變,原因是因為string類型一旦賦值則不能改變,而當重新進行賦值的時候,只是在堆上重新創建了一個副本,因此,此時str1指向了新的賦值引用,而str2仍然引用的是之前的str1值。
再來看看stringbuild:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
StringBuilder str1 = new StringBuilder("hello,world"); //定義一個stringbuild的實例str1,并賦初值
Console.WriteLine(str1);
StringBuilder str2 = new StringBuilder(); //再定義一個實例str2,并指向str1
str2 = str1;
Console.WriteLine(str2);
str1.Remove(0,str1.Length); //清除str1的所有字符串
Console.WriteLine(str1); //再次 輸入的時候就輸出為空了,str1,str2均為空
Console.WriteLine(str2);
Console.ReadLine();
}
}
}
我們會發現,當我們改變str1的值的時候,str2的值也已經改變,這是因為stringbuild 是一個完全的引用。當我們改變str1的值的時候,str2所指向的值也發生了改變。
作者:
徐阳
时间:
2012-9-15 14:18
希望在明日 发表于 2012-9-14 23:38
个人对string 與stringbuild做个终极小结!!!
1; 不同點,string可以直接用來聲明一個字符串類型 ,但是s ...
THANK YOU:lol
作者:
张青江
时间:
2012-9-15 14:43
String 的值构成该连续集合的内容,并且该值是恒定的。
由于 String 的值一旦创建就不能再修改,所以称它是恒定的。看似能修改 String 的方法实际上只是返回一个包含修改内容的新 String。
从这里来看:String使用+号连接新字符串,指示返回来一个新的String。也就是说,原来的String和现在的String 可以认为是两个对象的内容。
StringBulider类表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为在通过追加、移除、替换或插入字符而创建它后可以对它进行修改。那么,它可以说成是字符容器,在这个容器里面允许操作。而且它需要使用ToString()方法来将这个对象中的内容转化成String,用于显示!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2