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。

版权声明:本文为love-programming原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/love-programming/p/12407348.html