操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
StringBuffer 是通过使用 synchronized 来保证线程安全的。synchronized 关键字可以确保在同一时刻只有一个线程可以访问 StringBuffer 的方法。这意味着当一个线程正在执行一个方法时,其他线程必须等待,直到这个方法执行完毕并释放锁,才能继续访问 StringBuffer 的方法。这种同步的机制能够确保多个线程同时访问 StringBuffer 时不会出现冲突,从而保证线程安全。