"..." +"..." 直接字面值的操作最快,因为 jvm 直接将其解释为 1个字符串
String 对象 的操作 比较耗费时间,
StringBuilder 还可以,非线程安全的
StringBuffer 还行,线程安全,比 StringBuilder 慢点,
大多数情况下,效率上:
"..." + "..." > StringBuilder > StringBuffer > String对象+String对象
测试类:
package test;
public class StringAddTest {
private final static int repeatCount = 10000000;
public void testStringDirect() {
long begin = System.currentTimeMillis();
for (int i = 0; i < repeatCount; i++) {
String s = "abc" + "_opq_" + "xyz";
}
long over = System.currentTimeMillis();
System.out.println("\"...\"+\"...\" 直接相加:" + (over - begin) + " millseconds ");
}
public void testStringBuffer() {
long begin = System.currentTimeMillis();
for (int i = 0; i < repeatCount; i++) {
StringBuffer s = new StringBuffer();
s.append("abc").append("_opq_").append("xyz");
}
long over = System.currentTimeMillis();
System.out.println("StringBuffer 的 append() : " + (over - begin) + " millseconds ");
}
public void testStringBuilder() {
long begin = System.currentTimeMillis();
for (int i = 0; i < repeatCount; i++) {
StringBuilder s = new StringBuilder();
s.append("abc").append("_opq_").append("xyz");
}
long over = System.currentTimeMillis();
System.out.println("StringBuilder 的 append() : " + (over - begin) + " millseconds ");
}
public void testStringObject() {
long begin = System.currentTimeMillis();
for (int i = 0; i < repeatCount; i++) {
String s1 = "abc";
String s2 = "_opq_";
String s3 = "xyz";
String s = s1 + s2 + s3;
}
long over = System.currentTimeMillis();
System.out.println("String 对象 相加, 直接相加:" + (over - begin) + " millseconds ");
}
public static void main(String[] args) {
StringAddTest st = new StringAddTest();
st.testStringDirect();
st.testStringBuffer();
st.testStringBuilder();
st.testStringObject();
}
}