String、StringBuffer、StringBuilder的关系与区别

String:

String对象一旦创建就不能改变,如果通过"+"做连接,是从新开辟了空间来存新的字符串,并把新字符串的引用赋值给了变量,如果需要进行大量的字符串修改操作,应该使用StringBuffer/StringBuilder/字符数组,最终结果都可以转换成String对象。

StringBuffer:

线程安全(同一时刻只能被一个线程操作)的可变字符系列,类似String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

每个字符串缓冲区都有一定容量,内部缓冲区溢出时,此容量自动增大。

StringBuilder:

JDK5开始,为StringBuffer补充了一个单线程使用的等价类,即StringBuilder。

与StingBuffer相比,通常应该优先使用StringBuilder,它不执行同步,所以速度更快。

常用函数:

1、public int length() 字符串的实际个数

2、public int capacity() 容量

3、public StringBuffer append(String str) 追加

4、public StringBuffer insert(int offset,String str) 

5、public int indexOf(String str)查找指定str的位置

6、public int indexOf(String str,int fromIndex)从fromIndex处开始查找指定str的位置

7、public int lastIndexOf(String str)最后一次出现

8、public StringBuffer reverse() 反转字符串

9、public String toString()

String、StringBuffer、StringBuilder的区别

1、String是不可变字符串,StringBuffer、StringBuilder是可变字符串

2、StringBuffer是线程安全的,StringBuilder是线程不安全的

3、String可以直接使用等号赋值,而StringBuffer、StringBuilder必须采用标准实例化法才行

4、String可以使用加号联结字符串,而StringBuffer、StringBuilder需要使用append()

5、运行速度上:StringBuilder > StringBuffer > String

Tips:

1、怎么理解String是不可变字符串?

对String进行操作不是在原有String对象上进行操作,而是重新创建了字符串;

例如 String s="java"; s="hello";是创建了一个新的对象"hello",并把"hello"的引用赋值给了变量s。

2、三者之间的转换关系

String------->StringBuffer/StringBuilder   通过new标准的实例化法

StringBuffer/StringBuilder ------->String   通过调用toString()函数

猜你喜欢

转载自blog.csdn.net/CSDNLYFc/article/details/83477492