2024年10月stringbuffer(String 与StringBuffer的区别 请说详细点,最好用内存分析解释)

 更新时间:2024-10-12

  ⑴stringbuffer(String与StringBuffer的区别请说详细点,最好用内存分析解释

  ⑵String与StringBuffer的区别请说详细点,最好用内存分析解释

  ⑶在java中有个类来负责字符的操作。.Character是进行单个字符操作的,.String对一串字符进行操作。不可变类。.StringBuffer也是对一串字符进行操作,但是可变类。String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String是final类,即不能被继承.StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象它只能通过构造函数来建立,StringBuffersb=newStringBuffer();note:不能通过付值符号对他进行付值.sb=“weletohere!“;//error对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.sb.append(“hello“);字符串连接操作中StringBuffer的效率要比String高:Stringstr=newString(“weleto“);str+=“here“;的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffertoSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String对象是不可变对象,每次操作Sting都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.看看以下代码:将个英文字母重复加了次,Stringtempstr=“abcdefghijklmnopqrstuvwxyz“;inttimes=;longlstart=System.currentTimeMillis();Stringstr=““;for(inti=;i《times;i++){str+=tempstr;}longlend=System.currentTimeMillis();longtime=(lend-lstart);System.out.println(time);可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为左右。也就是秒。我们再看看以下代码Stringtempstr=“abcdefghijklmnopqrstuvwxyz“;inttimes=;longlstart=System.currentTimeMillis();StringBuffersb=newStringBuffer();for(inti=;i《times;i++){sb.append(tempstr);}longlend=System.currentTimeMillis();longtime=(lend-lstart);System.out.println(time);得到的结果为有时还是所以结论很明显,StringBuffer的速度几乎是String上万倍。当然这个数据不是很准确。因为循环的次数在次的时候,差异更大。不信你试试。根据上面所说:str+=“here“;的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffertoSting();所以str+=“here“;可以等同于StringBuffersb=newStringBuffer(str);sb.append(“here“);str=sb.toString();所以上面直接利用“+“来连接String的代码可以基本等同于以下代码Stringtempstr=“abcdefghijklmnopqrstuvwxyz“;inttimes=;longlstart=System.currentTimeMillis();Stringstr=““;for(inti=;i《times;i++){StringBuffersb=newStringBuffer(str);sb.append(tempstr);str=sb.toString();}longlend=System.currentTimeMillis();longtime=(lend-lstart);System.out.println(time);平均执行时间为左右,也就是秒。总结:如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高

  ⑷stringbuffer与stringbuilder的区别

  ⑸二者的区别主要是在运行速度和线程安全这两方面。

  ⑹StringBuffer与StringBuilder中的方法和功能完全是等价的

  ⑺只是StringBuffer中的方法大都采用了?synchronized?关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。

  ⑻在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。

  ⑼string和stringbuffer的区别

  ⑽string会有个String的池,若该池里有要创建的字符串直接将池里面的对象赋给该String,否则重新创建字符串并将值放入池中,因此String不可改变。而StringBuffer操作的是同一对象,每次不会重新创建字符串

  ⑾JAVA中的StringBuffer是什么东西,是拿来干什么的

  ⑿你可以看它与String的区别主要用于拼接字符串是一个可变长的字符窜、StringBuffer对象的初始化StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。例如:StringBuffers=newStringBuffer();这样初始化出的StringBuffer对象是一个空的对象。如果需要创建带有内容的StringBuffer对象,则可以使用:StringBuffers=newStringBuffer(“abc”);这样初始化出的StringBuffer对象的内容就是字符串”abc”。需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:StringBuffers=“abc”;//赋值类型不匹配StringBuffers=(StringBuffer)”abc”;//不存在继承关系,无法进行强转StringBuffer对象和String对象之间的互转的代码如下:Strings=“abc”;StringBuffersb=newStringBuffer(“”);StringBuffersb=newStringBuffer(s);//String转换为StringBufferStrings=sb.toString();//StringBuffer转换为String、StringBuffer的常用方法StringBuffer类中的方法主要偏重于对于字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。a、append方法publicStringBufferappend(booleanb)该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:StringBuffersb=newStringBuffer(“abc”);sb.append(true);则对象sb的值将变成”abctrue”。使用该方法进行字符串的连接,将比String更加节约内容,例如应用于数据库SQL语句的连接,例如:StringBuffersb=newStringBuffer();Stringuser=“test”;Stringpwd=“”;sb.append(“select*fromuserInfowhereusername=“).append(user).append(“andpwd=”).append(pwd);这样对象sb的值就是字符串“select*fromuserInfowhereusername=testandpwd=”。b、deleteCharAt方法publicStringBufferdeleteCharAt(intindex)该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:StringBuffersb=newStringBuffer(“Test”);sb.deleteCharAt();该代码的作用删除字符串对象sb中索引值为的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。还存在一个功能类似的delete方法:publicStringBufferdelete(intstart,intend)该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如:StringBuffersb=newStringBuffer(“TestString”);sb.delete(,);该代码的作用是删除索引值(包括)到索引值(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。c、insert方法publicStringBufferinsert(intoffset,booleanb)该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:StringBuffersb=newStringBuffer(“TestString”);sb.insert(,false);该示例代码的作用是在对象sb的索引值的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。d、reverse方法publicStringBufferreverse()该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:StringBuffersb=newStringBuffer(“abc”);sb.reverse();经过反转以后,对象sb中的内容将变为”cba”。e、setCharAt方法publicvoidsetCharAt(intindex,charch)该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:StringBuffersb=newStringBuffer(“abc”);sb.setCharAt(,’D’);则对象sb的值将变成”aDc”。f、trimToSize方法publicvoidtrimToSize()该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

您可能感兴趣的文章:

相关文章