String\StringBuffer\StringBuilder

203 阅读2分钟

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 线程不安全,效率高。