Java第七讲
-
简述String,StringBuffer,StringBuilder三者的异同点,应该分别在何种场景下使用?
共同点:三者都是字符串类型,它们可以储存和操作字符串。
不同点:
(1)String对象是不可变的,String类是用final修饰的,内容不能被引用的字符串改变,每次对String对象进行改变的过程都等价于创建一个新对象,然后指向新对象,不仅效率低下,而且浪费有限的内存空间。而StringBuffer和StringBuilder表示的字符串对象可以直接进行修改,其对象能被多次修改,且不产生新对象。
(2)StringBuffer是线程安全类,StringBuilder是在单线程环境下使用的,它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
使用环境:
(1)String:在字符串不经常变化的场景中可以使用String,例如常量的声明、少量的变量运算。
(2)StringBuffer:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以使用StringBuffer,例如XML解析、HTTP参数解析和封装。
(3)StringBuilder:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以使用StringBuilder,如SQL语句的拼装、JSON封装等。 -
为什么不建议在for循环中使用 “+” 进行字符串拼接?
因为每次“+”相当于创建一个StringBuilder类对象,再把String类转化为StringBuilder类执行append,每次循环创建一个新对象浪费时间和空间。