StringBuilder创建对象 // StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。 StringBuilder sb = new StringBuilder(); 常用方法
在 StringBuilder 上的主要操作是 append 和 insert 方法。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
StringBuilder sb = new StringBuilder(); System.out.println( sb.append("app") ); System.out.println( sb.append("le") ); // apple StringBuilder sb2 = new StringBuilder(); sb2.append("le"); System.out.println( sb.insert(0,"app") ); // apple 字符串拼接效率问题及解决方法我们都知道字符串可以通过“+”进行连接,但是这种方式方式效率如何,下面让我们测试下:
public class Test_StringBuilder { public static void main(String[] args) { StringConcat();// + 拼接字符串,拼接10000次 } /* * 将字符串通过 + 连接 10000次 * 通过运行之间判断效率如何? */ public static void StringConcat() { // 定义字符串 String str = "abcdefghijklmnopqrstuvwxyz"; String result = ""; long start = System.currentTimeMillis(); //计时开始ms // 拼接字符串 for (int i = 0; i < 10000; i++) { result += str; } long end = System.currentTimeMillis(); // 计时结束ms // 打印拼接结果 System.out.println(end-start); //3248ms => 3.2s } }通过上述代码的运行,可以看到,运行之间需要3秒多,这效率确实有点低,但是到底有多低呢?我们再在测试StringBuilder比较下。在Test_StringBuilder类中添加如下方法
public static void StringBuilderConcat() { String str = "abcdefghijklmnopqrstuvwxyz"; StringBuilder sb = new StringBuilder(); long start = System.currentTimeMillis(); //计时开始ms for (int i = 0; i < 10000; i++) { sb.append(str); } long end = System.currentTimeMillis(); // 计时结束ms System.out.println(end-start); // 3ms }在main方法中进行调用该方法:
StringBuilderConcat(); // StringBuilder连接字符串,连接10000次通过上述此时,我们可以得出StringBuider的测试结果为3ms,当然每台电脑的运行结果可能都不一定相同,但是通过对比我们就真实体会到StringBuilder拼接字符的效率比String要高好几千倍,真实没有对比就没有伤害啊。
相比大家都知道了,我们工作时,需要字符串拼接,还是使用StringBuilder,因为它更高效。可能还有的小伙伴会说,StringBuffer呢?下面我们看下手册说明:
**该类(StringBuilder)被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 **
其实,StringBuilder和StringBuffer没有太大的差距,只是他们的“出生日期不同”,StringBuffer是JDK1.0出来的,而StringBuilder是JDK 1.5出来的,既然StringBuilder是StringBuffer的一个替换,相比官网肯定有做了些优化,官网也推荐我们使用StringBuilder,那我们只好恭敬不如从命了——使用StringBuilder。