DESKTOP-7J91214_20200903-张军强

1.总结

String StringBuffer StringBUilder的区别

相同点

  • 所有的操作都在池中进行
  • 都用于封装字符串

不同点

1.是否可变

  • String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。

        private final char value[];

  • StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

        char[ ] value;

2.线程安全

  • String中的对象是不可变的,也就可以理解为常量,显然线程安全
  • StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
  • StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

3.运行速度

  • 在运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

4.适用情况

  • String:适用于少量的字符串操作的情况

  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

5.其他

  • String的实例可以通过compareTo方法进行比较,其他两个不可以。

  • StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)

3.吐槽

早上还是有点冷,啊啊啊