Java String、StringBuilder、StringBuffer类
1.String类
- 创建字符串对象后,字符串对象不可以发生改变,并且这个字符串对象存储在方法区中的字符串常量池中。
- 即使想改变字符串对象,那么也只是在字符串常量池中重新创建了一个字符串对象而已。
2.StringBuffer类
- 他的父类是AbstractStringBuilder
- 创键的字符串在内存中为一个char类型的数组,默认的长度是16。
- 创建的字符串对象可以发生改变:
- 例如使用append()方法可以增加
- 使用这个方式增加的符串和String采用"+"号有什么区别?
- String采用+号进行字符串的拼接,但是相当于是重新创建了一个字符串对象
- StringBuffer 采用append()方法进行增加,只是改变了字符串对象的值,并没有再重新创建一个的字符串对象。
- StringBuilder采用append()方法进行增加,只是改变了字符串对象的值,并没有再重新创建一个的字符串对象。
- StringBuffer类中的所有的方法都是前面带有synchronized关键字(关键字的意思是“同步的”),线程安全
3.StringBuilder类
- 他的父类是AbstractStringBuilder
- 创建的字符串在内存中为一个char类型的数组,默认长度是16,这一点和StringBuffer是相同的
- StringBuilder类中的方法不带有synchronized关键字,线程不安全
什么时候用String呢?什么时候用StringBuffer呢?什么时候用StringBuilder呢?
在字符串不经常变化的场景中可以使用 String 类,例如常量的声明、少量的变量运算等
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用 StringBuffer,例如 XML 解析、HTTP 参数解析和封装等。
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程的环境中,则可以考虑使用 StringBuilder,如 SQL 语句的拼装、JSON 封装等。
本文来自博客园,作者:程序员hg,转载请注明原文链接:https://www.cnblogs.com/hg-blogs/p/15535995.html