470
京东网上商城
《Java编程思想》读书笔记 第十三章 字符串
《Java编程思想》读书笔记 第十三章 字符串
不可变String
String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修改后的字符串内容,而最初的String对象则丝毫未动
换句话说:任何对String的改变都会引发新的对象的生成
StringBuilder和StringBuffer
StringBuilder:线程不安全的
StringBuffer:线程安全的,要维持同步锁,因此效率低
public static void testString() {
long start = System.currentTimeMillis();
String str = null;
for (int i = 0; i < 200000; i++)
str = str + i + ",";
System.out.println(System.currentTimeMillis() - start);
}
public static void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < 200000; i++)
sbf.append(i + ",");
System.out.println(System.currentTimeMillis() - start);
}
public static void testStringBuilder() {
long start = System.currentTimeMillis();
StringBuilder sbl = new StringBuilder();
for (int i = 0; i < 200000; i++)
sbl.append(i + ",");
System.out.println(System.currentTimeMillis() - start);
}
public static void main(String[] args) {
testString();
testStringBuffer();
testStringBuilder();
}
可以很明显的看出来:效率:**StringBuilder > StringBuffer > String**
三者使用情景:
- 如果要操作少量的数据 --> String
- 单线程中,在字符串缓冲区下操作大量数据 --> StringBuilder
- 多线程中,在字符串缓冲区下操作大量数据 --> StringBuffer
最后更新:2017-06-15 14:01:40