第07章 常用类库API_03_StringBuffer源码分析与常用方法

在实际开发当中,我们经常会使用到字符串连接的操作,如果用String来操作,则使用“+”号完成字符串的连接操作。

使用String连接字符串,代码性能会非常低,应为String的内容不可改变,解决这个问题的方法是使用StringBuffer。

  StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类,所以在实际使用时,如果经常需要对一个字符串进行修改,例如追加、插入、删除等操作,使用StringBuffer要更加适合一些。对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别

先来两个面试题:

1.String,StringBuffer,StringBuilder的区别:

 a.StringBuffer和StringBuilder的区别:

        StringBuffer是jdk1.0版本的,是线程安全的,效率低

       StringBuilder是jdk1.5版本的,是线程不安全的,效率高

b.String和StringBuffer,StringBuilder的区别

     String是不可变的字符序列

    StringBuffer和StringBuilder是可变的字符序列

2.String和StringBuffer分别作为参数传递问题

   我们知道基本数据类型是值传递,不会改变其值,引用数据类型是是址传递,会改变其值。

但是String类虽里然是引用数据类型,当作参数传递时,不会改变其值,因为方法面对String值改变的操作,都是再创建以string对象,并且该对象随着方法的结束而变成垃圾。

  String对象的特点,一旦被初始化,就不能被改变

  StringBuffer则与String不一样,同其他引用数据类型一样,做参数传递时,同样传入的是地址值,但是方法中发生改变返回的是本身,方法弹栈后,改变的值仍然有效。

StringBuffer的添加功能:

1.public StringBuffer append(String str):可以把任意数据类型添加到字符串缓冲区里面,并返回字符串缓冲区本身

  注意:StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组,当调用添加的方法时,不会再重新创建对象,而是不断向原缓冲区添加字符

StringBuffer类中重写了toString方法,显示的是对象中的属性值

2.public StringBuffer insert(int offsert, String str): 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符缓冲区本身

注意:如果没有指定位置的索引就会报StringIndexOutOfBoundsException异常

StringBuffer的删除功能:

1.public StringBuffer deleteCharAt(int index) 删除指定位置的字符,并返回字符缓冲区本身

 注意:当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException异常

2.public StringBuffer delete(int start,int end) 删除从指定位置开始到指定位置结束的内容,返回字符缓冲区本身

 若清空缓冲区可写为delete(0,sb.length())

StringBuffer的替换功能:

1.public StringBuffer replace(int start,int end,String str) 从start开始到end结束用str替换

2.StringBuffer的反转功能 public StringBuffer reverse() 将字符串反转

StringBuffer的截取功能:

1.pubic string subString(int start) 从指定位置开始截取到末尾

2.public string subString(int start, int end)  截取从指定位置开始到指定位置结束

注意:返回值的类型是String,不再是StringBuffer本身。返回的是一个新的字符串,原StringBuffer本身不变。

StringBuffer与String的转换:

1.String——> StringBuffer

    a.通过构造方法

    b.通过append方法

2.StringBuffer——>String

    a.通过构造方法

    b.通过toString方法

    c.通过subString(0,str.length)
 

本文引用:

原文:https://blog.csdn.net/u011109931/article/details/50063019 

原文:https://blog.csdn.net/Dustin_CDS/article/details/50809754 
 

猜你喜欢

转载自blog.csdn.net/green_4321/article/details/84892475