测试String.format / StringBuilder / StringBuffer的性能
@Test
public void tesformat(){
int cap = 1000000;
List<String> l1 = new ArrayList<>(cap);
for(int i = 0; i < cap; i++){
String s1 = String.format("string_%d",i);
l1.add(s1);
}
long start = System.currentTimeMillis();
for(int i = 0 ;i < cap; i++){
int ii1 = 5 * i;
long ll1 = 10l * i;
String k = String.format("%s:%d:%d:%s", l1.get(i), ii1, ll1, "null");
}
long tick = System.currentTimeMillis() - start;
System.out.println("format:" + tick);
start = System.currentTimeMillis();
for(int i = 0 ;i < cap; i++){
int ii1 = 5 * i;
long ll1 = 10l * i;
String k = l1.get(i) + ":" + ii1 + ":" + ll1 + ":" + "null";
}
tick = System.currentTimeMillis() - start;
System.out.println("+++:" + tick);
start = System.currentTimeMillis();
for(int i = 0 ;i < cap; i++){
int ii1 = 5 * i;
long ll1 = 10l * i;
StringBuilder builder1 = new StringBuilder();
builder1.append(l1.get(i));
builder1.append(":");
builder1.append(ii1);
builder1.append(":").append(ll1);
builder1.append(":").append("null");
String k = builder1.toString();
}
tick = System.currentTimeMillis() - start;
System.out.println("StringBuilder:" + tick);
start = System.currentTimeMillis();
for(int i = 0 ;i < cap; i++){
int ii1 = 5 * i;
long ll1 = 10l * i;
StringBuffer builder = new StringBuffer();
builder.append(l1.get(i));
builder.append(":");
builder.append(ii1);
builder.append(":").append(ll1);
builder.append(":").append("null");
String k = builder.toString();
}
tick = System.currentTimeMillis() - start;
System.out.println("StringBuffer:" + tick);
}
输出结果如下:format 性能较差,“+”编译时被优化,基本与StringBuilder持平
Connected to the target VM, address: '127.0.0.1:36210', transport: 'socket'
format:1619
+++:87
StringBuilder:89
StringBuffer:174
Disconnected from the target VM, address: '127.0.0.1:36210', transport: 'socket'
Process finished with exit code 0