C语言中String和StringBuilder间的区别
1个回答
推荐于2016-07-24
展开全部
1. 构造字符串
在C#中, 不能使用new 操作符从一个文本常量字符串构造一个String 对象,因为String 类中没有提供接受字符串的参数的构造函数。
1.string str = " Hello World"; // 对的
2.string str2 = new string("Hello");//错误。
这时候通过ldstr(Load string)指令来创建一个String 对象的, 而不是用newobj创建对象实例的。
2. String 对象是不可变的, 具体指字符串一旦创建了, 就不能更改、不能变长或变短。 主要是因为 String 中的索引器是只读的, 因为String是不可变的,这就使得在操作或访问一个字符串时不会发生线程同步问题。
String类中索引器定义:
1.public char this [int index]
2.{ get; }
有些朋友对于String 不可变 有一些误解, 可能因为下面的例子:
1.string str = " Hello World";
2.str = "Hello";
3.Console.Write(str); // 输出 Hello
有些朋友可能认为String对象str被修改了, 其实并不是这样的,String对象str已经重新指向了一个新的字符串常量:“Hello”, 而不是在原来字符串上修改, 这时候因为"Hello World"因为没有引用了,所以会认为是垃圾,会被垃圾回收。
String 字符串中还有一个 字符串留用(string interning)技术, 在这里我就不介绍了。
3. 而StringBuilder是可变的, 可利用它高效地对字符串和字符进行动态处理。可以通过Append和Insert方法等方法来更改字符数组的内容,而不会造成在托管堆上分配新对象。
在C#中, 不能使用new 操作符从一个文本常量字符串构造一个String 对象,因为String 类中没有提供接受字符串的参数的构造函数。
1.string str = " Hello World"; // 对的
2.string str2 = new string("Hello");//错误。
这时候通过ldstr(Load string)指令来创建一个String 对象的, 而不是用newobj创建对象实例的。
2. String 对象是不可变的, 具体指字符串一旦创建了, 就不能更改、不能变长或变短。 主要是因为 String 中的索引器是只读的, 因为String是不可变的,这就使得在操作或访问一个字符串时不会发生线程同步问题。
String类中索引器定义:
1.public char this [int index]
2.{ get; }
有些朋友对于String 不可变 有一些误解, 可能因为下面的例子:
1.string str = " Hello World";
2.str = "Hello";
3.Console.Write(str); // 输出 Hello
有些朋友可能认为String对象str被修改了, 其实并不是这样的,String对象str已经重新指向了一个新的字符串常量:“Hello”, 而不是在原来字符串上修改, 这时候因为"Hello World"因为没有引用了,所以会认为是垃圾,会被垃圾回收。
String 字符串中还有一个 字符串留用(string interning)技术, 在这里我就不介绍了。
3. 而StringBuilder是可变的, 可利用它高效地对字符串和字符进行动态处理。可以通过Append和Insert方法等方法来更改字符数组的内容,而不会造成在托管堆上分配新对象。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询