string与stringbuffer的认识和理解

string与stringbuffer的认识和理解

ID:34418649

大小:32.00 KB

页数:6页

时间:2019-03-06

string与stringbuffer的认识和理解_第1页
string与stringbuffer的认识和理解_第2页
string与stringbuffer的认识和理解_第3页
string与stringbuffer的认识和理解_第4页
string与stringbuffer的认识和理解_第5页
资源描述:

《string与stringbuffer的认识和理解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、String对象学习心得:/***String对象是值不可变对象,无论是对该对象添加字符还是删除*字符或者*还是将两个string字符串对象连接起来,其实都是在原有的字符*串基础上进行*操作然后将操作后的结果再赋值给一个新的字符串对象,最后,*再返回这个*新的字符串对象,虽然对String对象操作后得到的结果还是一个*字符串对象*但是操作的过程中隐含了从新实例化一个新的字符串对象的过程*例如:Stringstr1,str2;*str1.concat(Str2);*实际是将str2连接到str1的末尾,然后将str1和str2*连接后的内容从新赋值给一个新的字符串对象

2、str3,上面的操作相当于下面的语句:*str3=newString(str1+str2);而该操作后str1和str2的内容不*变,还是原来*的值;同理,对String对象的其他操作如曾、删等操作也是这样*的道理...*下面用一个例子说明:*/publicclassDemo{@Testpublicvoidtest(){Stringstr1="A";Stringstr2="B";operate(str1,str2);System.out.println(str1+”.”+str2);}publicvoidoperate(Stringstr1,Stringstr2){

3、str1.concat(str2);str2=str1;}运行结果:A.B对StringBuffer类的认识:/***再看这个例子:*我将publicvoidoperate(Stringstr1,Stringstr2)方法中*的数据类型改成了StringBuffer,其运行结果不一样*了????????*运行结果为:AB.B*前半部分与我们所想的结果一样,但是后半部分的结果却不一样,*为什么?*因为StringBuffer类型的变量不想String类型的变量,String类*型的变量*的值是不能改变的,一旦改变就会有一个隐含的自动生成新的*String类型变量的过程

4、,*而StringBuffer类型的变量的值是可变的,可以在其变量的基础*上进行曾、删等操作*变量的值也会随着上述的操作而发生改变,所当在operate方法中*执行str1.append(str2);*语句后在执行System.out.println(str1);语句,运行结果为:AB*再看另外的一部分结果:*当执行语句operate(str1,str2);System.out.println(str2);其*运行结果为什么会是:B*这就要看operate()方法中的一句赋值语句:str2=str1;该语句*看似简单,其实暗藏玄机*首先:str1、str2对象通过方

5、法operate(str1,str2)将它们的引用*在java中实际相当于* C,C++中的指针,它指向的是变量的地址)的副本传递给了该法* 中的两个参数,而operate方法中*的两个参数分别与str1、str2是指向同一个对象的,所以上面对* str1引用的副本操作后会引起str1的值*也发生变化,str2之所以没发生变化是因为operate中的参数(也* 就是operate(str1,str2)中的str2*注意:虽然operate中的参数也叫str2但是与外面测试程序中的* str2是不同的,operate中的str2是*测试程序中str2的一个引用副本它们

6、是不一样的)str2执行了* str2=str1;语句,这一语句的意思就是将引用*str2指向str1引用所指的对象,因此,方法参数str2不在指向实* 际参数str2所指的对象,故即使现在方法参数*str2的值发生变化,也不会引起实际参数str2值的变化,但是此* 时若改变方法参数str2的值,会引起方法参数str1*和实际参数str1的变化,因为此时的方法参数str2已经与方法参* 数str1和实际参数str1所指的对象一样,故现在只*要改变三者其中一个的值势必会引起另外两个引用的值....(注* 意:这里关键要理解基本数据类型的赋值语句和对象引用*赋值的差别.

7、..)**/程序代码:publicclassDemo{@Testpublicvoidtest(){StringBufferstr1=newStringBuffer("A");StringBufferstr2=newStringBuffer("B");operate(str1,str2);System.out.println(str1+"."+str2);}publicvoidoperate(StringBufferstr1,StringBufferstr2){StringBufferstr3=str2;str1.append(str2);str2=str1;st

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。