005.String、StringBuffer、StringBuiIder有什么区别!

10

String

String是常量,具有不可变性。

JDK1.9之前底层实现是char[]数组,之后是byte[]数组。虽然具有不可变性,但是可以通过反射技术修改数组的字符。

String重写了equals()方法比较的是值,==方法比较的是地址。

字符串的字面值存储在方法区的常量池中,可以共享。JDK1.7之前存储在方法区的常量池中,之后移入堆中。

常用方法:charAt()、contains()、length()、compareTo()、intern()

intern():保留:调用之后会先取常量池中找该对象有没有存在(此时存储在堆中),如果有直接获取该对象,如果没有JDK1.7之前是复制一份对象到堆中,之后是复制的引用。还要注意特殊的关键字:java、void

StringBuffer:线程安全、效率慢

StringBuilder:线程不安全、效率快

两者适用于大量字符串拼接的情况。