StringBuffer:
1.应用场景:经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合
2.实现原理:StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。StringBuffer对象的每次修改都会改变对象自身,这点是和String类最
大的区别。
String str = new String("welcome to "); str += "here";的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffer进行toString(); 这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
3.StringBuffer是线程安全的,同步的。?
4.初始化:注意String可以直接赋值,但是StringBuffer不可以;String与StringBuffer之间可以进行转换,但不能强转
<pre name="code" class="java">错误案例:
StringBuffer s = “abc”; //赋值类型不匹配
StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转
StringBuffer result = null; //错误:Null pointer access: The variable result can only be null at this location
正确案例:
StringBuffer对象和String对象之间的互转的代码如下:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String
5.常用方法:
1)追加append()
<pre name="code" class="java"> StringBuffer sb = new StringBuffer(“abc”);
sb.append(true);
-----------------结果:”abctrue”
StringBuffer sb = new StringBuffer();
String user = “test”;
String pwd = “123”;
sb.append(“select * from userInfo where username=“)
.append(user)
.append(“ and pwd=”)
.append(pwd);
-----------------结果:“select * from userInfo where username=test and pwd=123”,应用于数据库SQL语句的连接
2)删除deleteCharAt()与delete()
<pre name="code" class="java"> StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
-----------------结果:”TString”
StringBuffer sb = new StringBuffer(“Test”);
sb. deleteCharAt(1);
-----------------结果:”Tst”
3)字符串反转reverse()
<pre name="code" class="java"> StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
-----------------结果:”cba”
4)修改某个字符setCharAt()
<pre name="code" class="java"> StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);
-----------------结果:”cDa”
5)插入inverse