String&StringBuffer&StringBuilder

String , StringBuffer & StringBuilder

这三种东西,我其实一直不太理解区别,在网上搜集了一些资料,加深记忆一下。

Speed :StringBuilder > StringBuffer > String

  • String是字符串常量,是literal不可变的对象。

    怎么说不可变呢

    1
    2
    String s = "abc";
    s = s+d; //s=abcd

    然而其实jvm并不是改变了原本的对象,而是先创建了一个新的对象(值为abcd)然后将引用s指向后创建的对象。换言之,我们之前创建的对象并没有被改变,而是被当成垃圾回收掉了。不停创建新的对象,所以速度慢慢的。

  • StringBuffer & StringBuilder是字符串变量,是可以改变的对象。我们在用他们对字符串进行操作的时候,实际上是在一个对象操作。而不是像string那样创建一些新的对象操作,速度upup。

  • StringBuilder&StringBuffer

    前者是线程非安全的,后者是线程安全的。

Some methods of StringBuffer

No. Description
1 public StringBuffer append(String s)
2 public StringBuffer reverse()
3 public delete(int start, int end)
4 Public insert(int offset, int i) 将int参数以字符串形式插入序列
5 replace(int start, int end, String str)
No. Description
1 int capacity()
2 char charAt(int index)
3 void ensureCapacity(int minimumCapacity)确保容量至少等于制定的最小值
4 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组dst
5 int indexOf(String str [int fromIndex])
6 int lastIndexOf(String str [int fromIndex])
7 void setCharAt(int index, char ch)
8 String substring()
9 String toString()

To sum up,

  1. 如何数据量少,用String;
  1. 如果单线程操作字符串缓冲区下,操作大量数据 StringBuilder;
  2. 同理,多线程下,用StringBuffer。

自己看看学习吧。很多是从网上借鉴的。

https://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html