一、什么是StringBuffer与StringBuilder
当我们使用用字符串做拼接时,这是一个比较耗时并且也耗内存的操作,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了字符串缓冲区类,即:StringBuffer与StringBuilder。
字符串缓冲区就像一个String ,但它是可变的字符序列,即:可以修改。(可以通过某些方法调用来更改序列的长度和内容)
由于StringBuilder和StringBuffer的操作相似,所以下文只介绍StringBuffer的相关操作。
二、StringBuffer的构造方法
1 | StringBuffer() |
三、StringBuffer的常见功能
(一)添加功能
1 | public StringBuffer append(String str): //可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 |
(二)删除功能
1 | public StringBuffer deleteCharAt(int index): //删除指定位置的字符,并返回本身 |
(三)替换功能
1 | public StringBuffer replace(int start,int end,String str): //从start开始到end用str替换 |
(四)反转功能
1 | public StringBuffer reverse() |
(五)截取功能(注意这个返回值)
1 | public String substring(int start) |
StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
(六)常见操作
String和StringBuffer相互转换
1、String -> StringBuffer
1 | // 方式1:通过构造方法 |
2、StringBuffer -> String
1 | StringBuffer buffer = new StringBuffer("java"); |
四、面试题
1、String,StringBuffer,StringBuilder的区别?
A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
2、StringBuffer和数组的区别?
二者都可以看成是一个容器,装其他的数据。
但是,StringBuffer的数据最终是一个字符串数据。
而数组可以放置多种数据,但必须是同一种数据类型的。
3、看程序写结果
1 | public class StringBufferDemo { |
解析:
1 | String作为参数传递,效果和基本类型作为参数传递是一样的,实际参数的改变并不会影响形式参数; |
补充:
有如下代码
1 | System.out.println("ii:" + 变量); |
其实,上述代码在编译之后的代码如下
1 | System.out.println((new StringBuilder("ii:")).append(变量).toString()); |
即:在输出语句中,实际上我们使用的是StringBuilder类。
其他参考文章:一篇与众不同的 String、StringBuilder 和 StringBuffer 详解
Java新手,若有错误,欢迎指正!