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