谈谈: String 和StringBuilder区别和选择

简介:

对于string 和stringbuilder相信大家经常会使用到, 但是相信它们的区别和如何选择对于初学者还是会有不清楚的,下面我来分享下我的理解, 如果什么不对的地方希望大家指出来。

(一)String 和StringBuilder区别

1. 构造字符串

在C#中, 不能使用new 操作符从一个文本常量字符串构造一个String 对象,因为String 类中没有提供接受字符串的参数的构造函数。

  string str = " Hello World"; // 对的
  string str2 = new string("Hello");//错误。

这时候通过ldstr(Load string)指令来创建一个String 对象的, 而不是用newobj创建对象实例的。

2. String 对象是不可变的, 具体指字符串一旦创建了, 就不能更改、不能变长或变短。 主要是因为 String 中的索引器是只读的, 因为String是不可变的,这就使得在操作或访问一个字符串时不会发生线程同步问题。

String类中索引器定义:

public char this [int index] 
{ get; }

有些朋友对于String 不可变 有一些误解, 可能因为下面的例子:

              string str = " Hello World"; 
              str = "Hello";
              Console.Write(str); //  输出 Hello

有些朋友可能认为String对象str被修改了, 其实并不是这样的,String对象str已经重新指向了一个新的字符串常量:“Hello”, 而不是在原来字符串上修改, 这时候因为"Hello World"因为没有引用了,所以会认为是垃圾,会被垃圾回收。

String 字符串中还有一个 字符串留用(string interning)技术, 在这里我就不介绍了,想了解的朋友可以查看Artech 博客中的字符串驻留这篇文章。

 

3. 而StringBuilder是可变的, 可利用它高效地对字符串和字符进行动态处理。可以通过Append和Insert方法等方法来更改字符数组的内容,而不会造成在托管堆上分配新对象。

 

(二)什么时候用String, 而什么时候用该用StringBuilder

有些人可能会认为既然这样, 那是不是不需要String类型的? 只要我们在所有需要用String的地方都用StringBuilder代替就可以了, 答案肯定是否定的,

我个人理解是:当要对字符串进行频繁的操作的时候,在 String 和 StringBuilder 之间,我们应该选择 StringBuilder, 对于一般的操作操作还是使用String类型,因为stringbuilder功能强大,这意味着其底层实现更复杂,一些简单的功能用string当然更简洁、甚至比用Stringbuilder更高效率。




     本文转自LearningHard 51CTO博客,原文链接:http://blog.51cto.com/learninghard/1034003,如需转载请自行联系原作者



相关文章
|
存储 安全 Java
String StringBuffer StringBuilder 区别详解与对比分析
本文详细解析了Java中String、StringBuffer和StringBuilder的区别,从可变性、线程安全性和性能三个方面进行对比,并结合具体应用场景分析了三者的适用范围。通过性能测试示例展示了它们在字符串拼接时的效率差异,同时提供了实际代码案例帮助理解。总结指出,String适合少量操作或线程安全场景,StringBuffer适用于多线程环境,而StringBuilder则在单线程下性能最优。开发者应根据需求选择合适的类以优化程序性能。文末还附有相关面试资料供参考。
1388 2
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
763 57
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
262 5
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
429 8
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
1368 1
|
10月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
520 5