String
本质是字符数组。
特点:
1.String是一个final修饰的类,不能够被继承。
2.类似"abc"这样的字符串字面值常量也是String类的对象,既然是对象,就可访问String的成员。
3.它们的值在创建后不能被更改,但是可以被共享。
4.字符串缓冲区支持可变字符串 【StringBuffer/StringBuilder】
5.如果字符串的拼接操作非常频繁,那么String的效率不高,会在常量池创建大量的字符串,所以建议使用字符串缓冲区。
String s = "abc" 和 String s = new String("abc"); 的区别: String s = "abc",只在方法区开辟内存空间;
String s = new String("abc"); 同时在方法区和堆区开辟内存空间;
我们一般使用 String s = "abc" 的方式创建字符串对象。
StringBuffer
线程安全的可变字符序列。
一个类似于 String 的字符串缓冲区,不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
特点:
1.可变长的字符序列;
2.线程安全,效率低;
在线程(工作线程)中,“安全性”和“效率”二者只能取其一。
StringBuilder
线程安全的可变字符序列。
与StringBuffer相同,可以通过某些方法调用来改变序列的长度和内容。
经典面试题解析:
String,StringBuffer,StringBuilder三者的区别。
String的特点: 线程不安全, 一旦在方法区创建就不会被更改,可以给多个对象引用共享,在做大量字符串拼接的时候效率低。
StringBuffer,StringBuilder 是一个字符串缓冲区,可以改变字符串的长度和内容,在做大量字符串拼接的时候不会开辟新的空间。
StringBuffer,StringBuilder的区别
StringBuffer 线程安全,效率低。
StringBuilder 线程不安全,效率高。