前言
该篇主要聊聊日常使用的字符串,字符串看似很简单,但却是日常使用必不可少的,因此了解字符串的使用和原理至关重要。
本篇博文的重点是,理解字符串是什么,String、StringBuffer、StringBuilder 有什么区别以及如何使用
具体内容
1.String、StringBuffer、StringBuilder是什么
String是什么?
String是java.lang包下最常用的类。提供了管理和使用字符串的各种构造和逻辑。她被声明成为 final class,所有属性也都是 final 的。因此它是不可变的,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。
StringBuffer是什么?
StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer 是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的需要,不然还是推荐使用StringBuilder,为什么StringBuffer是线程安全得由于很多方法使用了synchronized关键字修饰
StringBuilder是什么?
StringBuilder 是 Java 1.5 中新增的,在能力上和 StringBuffer 没有本质区别,都是使用来拼接字符串使用的,不同的是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选。
2.使用场景
| 类型 | 线程是否安全 | 性能 | 推荐使用场景 |
|---|---|---|---|
| StringBuffer | 线程安全 | 低 | 多线程环境,在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等 |
| StringBuilder | 非线程安全 | 高 | 单线程环境,在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装 |
| String | 非线程安全 | 高 | 单线程环境,在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。 |
3.常用方法
常用方法直接上源码,看源码是最好的学习和使用方法,这里简单陈述