String 类总结
(补充!)String 使用注意说明:
-
String s = "a"
:创建了一个字符串
-
s += "b"
-
实际上原来的 “a” 字符串对象已经弃弃了,现在又产生了一个字符串 s + “b” (也就是 “ab”)
-
如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率
-
如果这样的操作放到循环中,会极大影响程序的性能
-
结论:如果我们对 String 做大量修改, 不要使用 String
1. 类别
-
Stirng
-
StringBuffer
-
StringBuilder
2. 效率关系
StringBuilder > StringBuffer > String
效率测试代码
public class time_test {
public static void main(String[] args) {
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 80000; i++) {
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer 的执行时间: " + (endTime - startTime));
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 80000; i++) {
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder 的执行时间: " + (endTime - startTime));
String text = "";
startTime = System.currentTimeMillis();
for (int i = 0; i < 80000; i++) {
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String 的执行时间: " + (endTime - startTime));
}
}
输出结果
StringBuffer 的执行时间: 10
StringBuilder 的执行时间: 0
String 的执行时间: 3871
3. 如何选择?
-
如果字符串在大量的修改操作,一般使用 StringBuffer
或 StringBuilder
-
如果字符串在大量的修改操作,并在单线程的情况下,使用 StringBuilder
-
如果字符串在大量的修改操作,并在多线程的情况下,使用 StringBuffer
-
如果我们字符串很少修改,被多个对象引用,使用String
,比如配置文件信息等