String、StringBuffer、StringBuilder的区别
相同之处:String、StringBuffer、StringBuilder都是final类,不允许被继承。
不同之处:主要是性能和线程安全这两个方面。
性能:StringBuilder>StringBuffer>String
- String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建就不可更改(对String的值的修改JVM会创建新对象,回收旧对象),后两者的对象是变量可以直接修改,因此String在修改值时性能远低后者。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的,因为StringBuffer的大部分方法上都加了synchronized关键字(一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该代码块时将会被阻塞),因此当涉及到多线程操作时,必须使用StringBuffer,单线程时使用StringBuilder(性能高)。
String:适用于少量的字符串操作的情况
StringBuffer:适用于多线程下在字符串缓冲区进行大量操作的情况
StringBuilder:适用于单线程下在字符串缓冲区进行大量操作的情况