String类的对象为字符串常量,在源码中可以看到String类用final修饰,创建后不可修改。
String类的对象用重载的运算符+
修改,会产生新的对象。
StringBuffer 和 StringBuilder 类的对象均为字符串变量,能够被多次的修改,不产生新的未使用对象。
StringBuffer线程安全,StringBuilder线程不安全。
性能: StringBuilder > StringBuffer >> String
以下是百万次修改消耗的时间对比:
public static void main(String[] args) {
long t0 = Calendar.getInstance().getTimeInMillis();
String s1 = "";
StringBuffer s2 = new StringBuffer();
StringBuilder s3 = new StringBuilder();
for (int i = 0; i < 1000000; i++) s1 += "0";
long t1 = Calendar.getInstance().getTimeInMillis();
for (int i = 0; i < 1000000; i++) s2.append("0");
long t2 = Calendar.getInstance().getTimeInMillis();
for (int i = 0; i < 1000000; i++) s3.append("0");
long t3 = Calendar.getInstance().getTimeInMillis();
System.out.println(t1 - t0);
System.out.println(t2 - t1);
System.out.println(t3 - t2);
}
输出(单位为毫秒):
40582 // String
12 // StringBuffer
13 // StringBuilder
Reference
Java| Java中String对+的重载 – CSDN
Java StringBuffer 和 StringBuilder 类 – 菜鸟教程
发表评论