String(线程安全):是典型的Immutable类,被声明为final class ,所有属性也都是final的,因为它 的不可变性,类似字符串的拼接,裁剪等操作都会产生新的String对象。
为什么String被设计成final:1.安全性:eg:数据库的密码,用户名都是String,如果String不是final,可能通过一些手段用户名 密码被纂改。2效率:只有设计成final,常量池才有意义。
应用场景:
String :字符串内容不经常变化的业务优先使用String。
StringBuffer(线程安全):频繁的进行字符串的拼接裁剪等,并且运行在多线程环境下,优先使用StringBuffer。
eg:xml解析。
StringBuilder(线程非安全):频繁的进行字符串的拼接裁剪等,并且运行在单线程环境下,优先使用StringBuilder。
eg:sql语句的拼装,json的封装等。
String,StringBuffer 都是final修饰的,因为无论String还是StringBuffer本质都是数组char[] ,因为String的是final char[],而StringBuffer的是 char[] ,多了一个final.