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