(1)可变不可变:
String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。
StringBuffer:在修改时会改变对象自身,每次操作都是对StringBuffer对象本身进行修改,不会生成新的对象。使用场景:对字符串经常改变情况下,主要方法:append(),insert()等。
(2)线程是否安全:
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的,执行效率慢,适用于多线程下操作字符串缓冲区大量数据。
StringBuilder:线程不安全,适用于单线程下操作字符串缓冲区大量数据。
(3)共同点:
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
StringBuilder,StringBuffer的方法都会调用AbstractStringBuilder中的公共方法。只是StringBuffer会在方法上加synchronized关键字,进行同步。如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。