在Java中,String是不可变类型,因此对于字符串的操做提供了两个辅助类:StringBuffer和StringBuilder。java
这个两个类的主要区别在于:安全
不过,须要注意的是,在利用+
对String对象直接进行拼接的时候,Java内部其实仍是用StringBuilder来实现的,可是和显式地调用StringBuilder略有区别。app
考虑以下代码:ui
javaString[] strings = new String[]{"one", "two", "three", "four", "five"}; String resultStr = ""; StringBuilder resultBuilder = new StringBuilder(); for (int i = 0; i < strings.length; i++) { resultStr += strings[i]; } for (int i = 0; i < strings.length; i++) { resultBuilder.append(strings[i]); }
在利用+
直接进行拼接时,每次循环都会生成一个新的StringBuilder对象,也就是说等同:线程
javaStringBuilder stringBuilder = new StringBuilder(resultStr); stringBuilder.append(strings[i]); resultStr = stringBuilder.toString();
这样运行的效率明显是低于显式调用StringBuilder的。code
可是在有一种状况下,利用+
拼接的速度会远远快于用StringBuilder或者StringBuffer,考虑以下代码:对象
javaString str = "one" + "two" + "three"; StringBuilder strBuilder = new StringBuilder().append("one").append("two").append("three");
在这种状况下,JVM会直接把String str = "one" + "two" + "three";
理解为String str = "onetwothree”;
,也就说不须要像一般状况下生成StringBuilder对象而后再拼接,速度天然快不少。不过须要强调的一点是,固然字符串来自其余对象的时候,JVM不会作这种特殊处理,也就说以下代码:three
javaString one = "one"; String two = "two"; String three = "three"; String str = one + two + three;
效率仍然是很是低的。字符串