String、StringBuilder、StringBuffer区别
面试官:请你谈谈String
、StringBuilder
、StringBuffer
区别
作为经典Java八股,是面试必考的热门点。
下面让我们一起来看一下他们的区别吧!
主要是测试他们的效率和应用场景,具体语法不在此展开。
看完这篇文章和面试官对答如流!
后续会从底层源码剖析区别,喜欢的小伙伴关注一下!
测试代码
/**
* @author 寸铁
* @version 1.0
**/
public class StringVsStringBuilderVsStringBuffer {
public static void main(String[] args) {
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer();
//测试数据(可多组测试,对比处理结果)
int n = 100000;
//StringBuffer的测试时间
startTime = System.currentTimeMillis();
for(int i = 0; i < n; i++){
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:" + (endTime - startTime));
StringBuilder builder = new StringBuilder();
//StringBuilder的测试时间
startTime = System.currentTimeMillis();
for(int i = 0; i < n; i++){
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:" + (endTime - startTime));
String text = "";
//String的测试时间
startTime = System.currentTimeMillis();
for(int i = 0; i < n; i++){
text += i;
}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:" + (endTime - startTime));
}
}
实测结果:
测试数据为2000
测试数据为60000
测试数据为100000
处理效率:StringBuilder>StringBuffer>String
并且随着处理数据的增大,处理效率差距越来越大!!!
结论
- 如果字符串存在大量的修改操作,一般使用
StringBuffer
或StringBuilder
- 如果字符串存在大量的修改操作,并在单线程(线程不安全)的情况下,使用
StringBuilder
- 如果字符串存在大量的修改操作,并在多线程(线程安全)的情况下,使用
StringBuffer
- 如果字符串很少修改,被多个对象引用,使用
String
,如配置信息。(底层实际上是对常量池字符串的引用)
喜欢的小伙伴点点关注!