String类是被final最终关键字修饰的,所以无法被修改。
所以我们在使用String类型进行字符串拼接时,java每次都会创建一个新的对象。
效率非常的低。
让我们来测试一下。
public class StringTest {
public static void main(String[] args) {
String one = "";
// StringBuffer one = new StringBuffer("");
long startTime = System.currentTimeMillis();
for(int i=0;i<10000;i++) {
// one.append(i);
one +=i;
}
long endTime = System.currentTimeMillis();
// System.out.println(one.toString());
System.out.println("Time:"+(endTime-startTime));
}
}
C:\Users\PiLiPaLa\Desktop\J_Code\Eleven>java StringTest
Time:126
我们使用的时间是126毫秒。
进行了很多次测试,都是在120毫秒左右。
我们使用StringBuilder类进行测试。
public class StringTest {
public static void main(String[] args) {
// String one = "";
StringBuilder one = new StringBuilder("");
long startTime = System.currentTimeMillis();
for(int i=0;i<10000;i++) {
one.append(i);
// one +=i;
}
long endTime = System.currentTimeMillis();
// System.out.println(one.toString());
System.out.println("Time:"+(endTime-startTime));
}
}
C:\Users\PiLiPaLa\Desktop\J_Code\Eleven>java StringTest
Time:16
时间大约在16毫秒,速度快了非常多,实际上对内存的消耗也是非常少。
而StringBuffer类是StringBuilder类的一个线程安全的版本,在需要多线程访问时,我们必须使用StringBuffer类。