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,如配置信息。(底层实际上是对常量池字符串的引用)
喜欢的小伙伴点点关注!





![[MySQL]存储引擎、索引、SQL优化](https://img-blog.csdnimg.cn/156ae0383dbc4be3ace93bf8494a2ad0.png)













