- 对比String,StringBuilder,StringBuffer
- String:不可变字符序列,一旦初始化,不能再改变
- StringBuilder:可变字符序列,线程不安全,效率高(单线程模式下使用,开发中用的较多)
- StringBuffer:可变字符序列,线程安全,效率低(多线程模式下使用,开发中用的较少)
- 研究StringBuilder的jdk源码
- 对比代码
- 用String实现字符串拼接(会产生很多垃圾对象,代码效率低下,浪费内存)
public class TestStringBuilder {
public static void main(String[] args) {
String str = "a";
for(int i=0;i<10;i++){
str+=i;
}
System.out.println(str);
}
}
- 用StringBuilder实现字符串拼接(只会生成一个对象,代码效率高)
public class TestStringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("a");
for(int i=0;i<10;i++){
sb.append(i);
}
System.out.println(sb.toString());
}
}
- String:不可变字符序列,一旦初始化,不能再改变
- StringBuilder:可变字符序列,线程不安全,效率高(单线程模式下使用,开发中用的较多)
- StringBuffer:可变字符序列,线程安全,效率低(多线程模式下使用,开发中用的较少)
- 用String实现字符串拼接(会产生很多垃圾对象,代码效率低下,浪费内存)
public class TestStringBuilder { public static void main(String[] args) { String str = "a"; for(int i=0;i<10;i++){ str+=i; } System.out.println(str); } }
- 用StringBuilder实现字符串拼接(只会生成一个对象,代码效率高)
public class TestStringBuilder { public static void main(String[] args) { StringBuilder sb = new StringBuilder("a"); for(int i=0;i<10;i++){ sb.append(i); } System.out.println(sb.toString()); } }