005.String、StringBuffer、StringBuiIder有什么区别!
String
String是常量,具有不可变性。
JDK1.9之前底层实现是char[]数组,之后是byte[]数组。虽然具有不可变性,但是可以通过反射技术修改数组的字符。
String重写了equals()方法比较的是值,==方法比较的是地址。
字符串的字面值存储在方法区的常量池中,可以共享。JDK1.7之前存储在方法区的常量池中,之后移入堆中。
常用方法:charAt()、contains()、length()、compareTo()、intern()等
intern():保留:调用之后会先取常量池中找该对象有没有存在(此时存储在堆中),如果有直接获取该对象,如果没有JDK1.7之前是复制一份对象到堆中,之后是复制的引用。还要注意特殊的关键字:java、void
StringBuffer
:线程安全、效率慢
StringBuilder
:线程不安全、效率快
两者适用于大量字符串拼接的情况。