首页 > 编程知识 正文

stringbuffer内存溢出,stringbuilder初始化

时间:2023-05-06 12:09:40 阅读:46964 作者:489

由于String类的String值是不变的,因此每次使用String时都会生成新的String对象,这不仅效率低下,而且浪费了大量有限的内存空间。 String str='hello world ';

第一个字符串值为“hello”且在该字符串之后添加新字符串“world”的过程需要新开拓堆栈中的存储器空间,最终要得到“hello world”字符串就相应地开拓存储器空间在这样短的两个字符串中,需要开拓三次存储器空间,这不得不说是存储器空间的巨大浪费。 StringBuffer和StringBuilder类与String类不同,可以多次修改StringBuffer和StringBuilder类中的对象,但不会生成新的未使用对象。 StringBuilder类在Java 5中提出,与StringBuffer的最大区别在于StringBuilder方法不安全线程(无法同步访问)。 StringBuilder与StringBuffer相比具有速度优势,因此通常建议使用StringBuilder类。 但是,如果APP应用程序需要线程安全,则必须使用StringBuffer类。 三者区分(String )可变字符串(StringBuffer )可变字符串、低效、线程安全Stringbuilder(JDK1.5 ) )可变字符串、效率、线程不安全初始化上的区分,String是可空赋值的报告错误并汇总处理少量数据时,使用字符串在多线程操作字符串缓冲区下操作大量数据StringBuffer; 在单线程操作字符串缓冲区下操作大量数据StringBuilder。 StringBuffer初始化和扩展机制StringBuffer ()的初始容量最多可达16个字符,如果存储在对象实体中的字符长度超过16个字符,实体容量将自动增加。 增加速度为n=2n 2,拼接字符的长度为当前容量大于正常扩展机制扩展的长度,即拼接长度k 2n 2,容量为k。 拼接前的当前容量为16,拼接后的字符长度为35 16*2 2=34,因此容量为35。

StringBuffer对象可以使用length ) )方法获取存储在实体中的字符串的长度,使用capacity ) )方法获取当前实体的实际容量。

stringbuffer(intsize )可以指定分配给对象的实体的初始容量参数在参数size中指定的字符数。 如果对象的实体包含大于size字符的字符串,则实体的容量会自动增加。 保存添加的文字。

stringbuffer(strings )是一个初始容量,可以将16个字符添加到参数字符串s的长度中,并分配给对象的实体。 如果对象的实体包含大于size字符的字符串,则实体的容量会自动增加,以存储添加的字符。

使用String陷阱String s='a '; //字符串s=s 'b '; //实际上原始的“a”字符串对象被丢弃,现在生成了另一个字符串s“b”(即“ab”)。 //多次执行更改这些字符串内容的操作会导致大量复制字符串对象保留在内存中,从而降低效率。 //这样的操作放置在循环中会严重影响程序的性能

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。