浅谈String/StringBuffer/StringBuilder字符串的拼接

    作者:课课家教育更新于: 2017-05-25 14:42:32

    Web开发

      java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在我们来看一下它们各自的内容:

      一、String类型的拼接

      java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在我们来看一下它们各自的内容:    一、String类型的拼接

      String的concat方法只会返回拼接括号内数据后的字符串,但是这个String类型的本身并不受影响。

     String的concat方法只会返回拼接括号内数据后的字符串,但是这个String类型的本身并不受影响。

      这里的拼接符不能所在的表达式不能单独存在,必须有赋值操作。

      二、StringBuffer类型的拼接

     这里的拼接符不能所在的表达式不能单独存在,必须有赋值操作。    二、StringBuffer类型的拼接

      可以看到,只要运用的append或insert方法,那么StringBuffer本身的值就会改变,而不用重新赋值。

      三、StringBuilder类型的拼接

     可以看到,只要运用的append或insert方法,那么StringBuffer本身的值就会改变,而不用重新赋值。    三、StringBuilder类型的拼接

      StringBuilder比StringBuffer运行速度要快,因为StringBuilder是针对于单线程的,所这它是非线程安全的。普通情况下建议使用StringBuilder。

      使用场景

      使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。

      使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。

      使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。

      对于三者使用的总结:

      1.如果要操作少量的数据用=String

      2.单线程操作字符串缓冲区下操作大量数据=StringBuilder

      3.多线程操作字符串缓冲区下操作大量数据=StringBuffer

      假如我们用StringBuffer/StringBuilder对字符串进行拼接,有时我们会犯哪些错误呢?下面小编给大家看一个错误案例:

      错误案例

      在循环中大量使用字符串连接,会导致不必要的内存消耗和频繁的垃圾回收。

      错误分析

      错误的写法:

    错误分析    错误的写法:

      能用"+"或"+="操作符来拼接大量字符串,在大量字符串拼接操作时,直接相加两个String对象,会为新创建的字符串分配内存,原有的两个String对象也没有释放掉,从而消耗大量的内存资源。

      在我们这种高访问量的网站中,一些微小的问题也可能被无限放大,成为严重影响系统性能的瓶颈。

      正确用法

    能用

      测试关注点

      通过持续的压力测试,看内存占用的增长情况

      小编结语:

      更多内容尽在课课家教育!

课课家教育

未登录