String,StringBuffer,StringBuilder的理解与区别
分享一道面试实习生或者初级开发常问的一道基础的面试题,我想题目大家已经看到了,那么此题何解呢?
大家很常用的就是String,可能对于初学者或者说刚入门的老铁们,基本上完全不用StringBuilder、StringBuffer。
但事实上它们的存在都是有意义的。
首先我们在执行以下的代码时:
String s = "a";
s = s + b;
这两句简单的代码,谁都会写,但是效率却低到了一个地步,因为String的机制问题,大家应该知道常量池的概念,这种执行的方式是,首先常量池会创建一个“a”,然后会创建一个“b”,再创建一个“ab”,而对象则也对应的创建了三次,因为在String操作的时候,首先创建了一个对象为“a”,然后又创建了一个s对象,在结合的时候又成了一个新的s对象,每执行一次,之前的s对象就会被GC给回收掉。因此就这么一个简单的“a”+“b”,String的效率基本低到了谷底,这就是String叫字符串常量的原因。
那么StringBuilder,StringBuffer呢?
这两个都叫做字符串变量,在需要改变字符串的值的时候,都是在自己的对象本身上改变,不会像String一样,每次改变都会新增对象。所以效率要高很多很多。但是这两者虽都是字符串变量,但也是有区别的。StringBuilder速度更快,但是线程不安全。相反,StringBuffer就属于线程安全,速度稍慢。
这下你知道这三者的区别了吗?