在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作。这里介绍一下StringBuilder常见的清空方式:
使用new关键字重新生成一个StringBuilder对象;使用StringBuilder的delete方法;使用StringBuilder的setLength方法;使用StringBuilder的replace方法。接下来分别测试上述4个方法,查看一下效率:
测试new新建对象:
@Test public void newTest() { int forCount = 100000000; StringBuilder sb = new StringBuilder(); long startTime = System.currentTimeMillis(); for (int i = 0; i forCount; i++) { sb.append("1111"); sb.append("2222"); sb.append("3333"); sb.append("4444"); // 新建对象 sb = new StringBuilder(); System.out.println("newTest()耗时:" + (System.currentTimeMillis() - startTime)); }运行结果:
newTest()耗时:2250测试delete方法:
@Test public void deleteTest() { int forCount = 100000000; StringBuilder sb = new StringBuilder(); long startTime = System.currentTimeMillis(); for (int i = 0; i forCount; i++) { sb.append("1111"); sb.append("2222"); sb.append("3333"); sb.append("4444"); // 使用delete方法清空 sb.delete(0, sb.length()); System.out.println("deleteTest()耗时:" + (System.currentTimeMillis() - startTime));运行结果:
deleteTest()耗时:1780测试setLength方法:
@Test public void setLengthTest() { int forCount = 100000000; StringBuilder sb = new StringBuilder(); long startTime = System.currentTimeMillis(); for (int i = 0; i forCount; i++) { sb.append("1111"); sb.append("2222"); sb.append("3333"); sb.append("4444"); // 使用setLength方法清空 sb.setLength(0); System.out.println("setLengthTest()耗时:" + (System.currentTimeMillis() - startTime));运行结果:
setLengthTest()耗时:1751测试replace方法:
@Test public void replaceTest() { int forCount = 100000000; StringBuilder sb = new StringBuilder(); long startTime = System.currentTimeMillis(); for (int i = 0; i forCount; i++) { sb.append("1111"); sb.append("2222"); sb.append("3333"); sb.append("4444"); // 使用replace方法清空 sb.replace(0, sb.length(), ""); System.out.println("replaceTest()耗时:" + (System.currentTimeMillis() - startTime));运行结果:
replaceTest()耗时:1776
由结果可知,上述四种方法中,使用new关键字循环创建对象效率最低,其他三种方法耗时相近,可择优选择使用。