- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
StringBuffer
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
介绍了用append()方法追加子串的功能。原文提供例子如下:StringBufferbuf=newStringBuffer(Hard);
StringaString=Waxworks;buf.append(aString,3,4);
原文说明:这个操作将aString的从索引位置3开始的由四个字符组成的子串追加到StringBuffer对象buf中。然后buf对象就会包含字符串Hardwork。请注意,这个代码的实际运行结果是:buf对象包含的字符串为Hardw。具体原因引用源代码:
publicsynchronizedStringBufferappend(CharSequences,intstart,intend)
{
super.append(s,start,end);returnthis;
}
根据运行结果分析,StringBuffer对象的append()方法的参数,如果是String类型,那么,后面取子串的操作实际是从索引3开始,取值到索引4之前的串。如果append的语句改成buf.append(aString,3,3);,那么没有添加aString的子串,即buf包含的字符实际还是Hard。如果此语句再改成buf.append(aString3,2);,那么系统会抛出IndexOutOfBoundsException的异常!
但是,如果append()的参数是字符数组(char[]),那么结果就如原文所述,buf
将包含串Hardwork.代码如下:
StringBufferbuf=newStringBuffer(Hard);char[]text={W,a,x,w,o,r,k,s};buf.append(text,3,4);//buf包含串Hardwork具体原因引用源代码:
publicsynchronizedStringBufferappend(charstr[],intoffset,intlen)
{
super.append(str,offset,len);returnthis;
}
(1)寄存器。这是最快的保存区域
(1)寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内
部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
(2)栈(stack)。存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是
存放在堆(new出来的对象)或者常量池中(字符串常量对象存放在常量池中。)驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特
别是对象句柄,但Java对象并不放到其中。
(3)堆(heap)。存放所有new出来的对象,一种常规用途的内存池(也在RAM区域),
其中保存了
其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器
不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,
必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4)静态存储。存放静态成员(static定义的),这儿的“静态”(Static)是指“位于固定位置”
(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键
文档评论(0)