StringBuilder、StringBuffer

来源:互联网 发布:herom2数据转换gom 编辑:程序博客网 时间:2024/05/09 12:22

  一直用到StringBuilder和StringBuffer,大概知道一些线程安全的区别。细化具体的区别并不是很清楚。强迫症在今天要得到满足。

顺便连上String,StringBuilder、SringBuffer三者一起做一下比较:

     String 字符串是不变对象,即对象内容不可改变。若改变内容必创建新对象。字面变量创建有优化。所以在对比的时候用equals。这里可能会出现一个误区,就是字符串的字面量。创建字符串基本上都是用的字面量。那么两个相同字面量比较是否相等。

     既然是两个,那么就是创建了两次,按理说是不应该相等的。但是他是存储在字符串常量池中的,JVM在运行.class文件时候就会在常量池中查找,当找到一个时,JVM会检查是否有相等的字符串在常量池中存放了堆中引用。如果找不到,就会在堆中创建一个对象,然后将它的引用存放在池中的一个常量表中。一旦一个字符串对象的引用在常量池中被创建,这个字符串在程序中的所有字面量引用都会被常量池中已经存在的那个引用代替。

     StringBuilder是线程非安全的:单线程操作字符串缓冲区下大量数据使用。

     StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。

     StringBuffer是线程安全的:多线程操作字符串缓冲区下大量数据使用。