StringBuffer是一个容器,且长度可变,
可以直接操作多个数据类型,数组只能操作一种
最终结果为字符串
字符串的原理就是通过该类实现的
-----------------------------------------------
1.添加
两个主要的方法:
StringBuffer append()-->将指定数据作为参数添加到已有数据的结尾处
看main函数中定义了sb,然后定义了sb2 =sb.append(34);
但是,当我打印这两个数据时,它们的值却是相等的!!!,都是34
为什么呢?
按常理说sb里面应该什么都没有啊
这个问题用面盆理论来解释:
sb就是面盆,面盆里面加了面,还是面盆啊,加了水,也还是面盆啊...
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412195905441-269012043.png)
---------------------------------------------------------------
sb.append("abc").append(true).append(34);
方法调用链,方法返回的是本类对象,还可以调用这个方法
------------------------------------------------------------
insert()-->append只能在字符串结尾处添加,而insert可以插入
sb.insert(index,数据);
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412195933395-77070085.png)
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200005848-1549056313.png)
--------------------------------------------------------------------
2.删除
上面append,insert都是添加;下面说删除
StringBuffer delete(start,end)-->删除的内容,包含start,不包含end
StringBuffer deleteCharAt(index)-->删除指定位置的字符
--------------------------------------------------------
初始化StringBuffer,删除1--3(包含1,不包含3)a0 b1 c2 d3 e4
即输出ade
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200027645-233573628.png)
用这个方法清空缓冲区
sb.delete( 0, sb.length() );
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200049191-193717843.png)
---------------------------------------------------------
删除指定位置上的某个字符
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200116020-1733695585.png)
------------------------------------------------------------
3.获取
上面讲了增、删,下面讲查(获取)
char charAt(int index)
返回此序列中指定索引处的
char
值。int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引
int lastIndexOf(String str)
返回最后一次出现的指定子字符串在此字符串中的索引
String substring(int start, int end);
返回一个新的
String
,它包含此序列当前所包含的字符子序列。注:返回的类型是字符串类型的
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200137629-1537605957.png)
-----------------------------------------------------------------
4.修改
修改原来字符串的内容
replace(int start, int end, String str)--包含首,不包含尾的原则,str为替换的内容
使用给定的字符替换此序列的子字符串中的字符。
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200201004-1867356436.png)
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200220629-167359832.png)
-----------------------------------------------------------------
void setCahrAt(int index, char ch)替换某个位置的字符,
注:没有返回值,替换完就结束了
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200239645-1115530804.png)
-------------------------------------------------------------
5.反转
StringBuffer reverse()
将abcde倒序打印
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200259191-1165213692.png)
------------------------------------------------------------
6.getChars(开始,结尾,容器,容器开始存储的位置)
将缓冲区的指定数据,存储到指定数组中
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200315816-1011593927.png)
看看,将1-4,即b,c,d存储到char数组(第二个位置开始存)
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412200337332-785162972.png)
-----------------------------------------------------------------
StringBuilder
JDK 1.5以后出现的,和StringBuffer几乎一样
StringBuffer是线程同步的;StringBuilder是线程不同步的
如果你是单线程,那就用StringBuilder,这样不用判断锁,提高效率,
如果是多线程,为了保证安全性,就用StringBuffer
以后开发,建议使用StringBuilder
----------------------------------------------------------------------
java升级的3个原因:
1.提高效率
2.简化书写
3.提高安全性