String , StringBuffer & StringBuilder
这三种东西,我其实一直不太理解区别,在网上搜集了一些资料,加深记忆一下。
Speed :StringBuilder > StringBuffer > String
String是字符串常量,是literal不可变的对象。
怎么说不可变呢
12String 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,
- 如何数据量少,用String;
- 如果单线程操作字符串缓冲区下,操作大量数据 StringBuilder;
- 同理,多线程下,用StringBuffer。
自己看看学习吧。很多是从网上借鉴的。
https://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html