String和StringBuffer的区别 1.String和StringBuffer的区别2.String a="abc"; String a="abcde"都说String长度不可变,这个例子应该怎么理解3.给我举一个StringBuffer该变长度的例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实这两句:String a= "abc "; String a= "abcde " 和以下两句是等价的:String a=new String("abc");String a=new String("abcde");StringBuffer是可变的。它有两个方法提供改变,一个是append,另一个是insert。 StringBuffer sb = new StringBuffer();sb.append("abc");sb.append("de");String s = sb.toString();StringBuffer是为了执行大量的字符串链接操作,避免直接"abc"+"de"操作时产生的无用字符串实例。 这样也是对的啊String a= "abc "; a= "abcde " ; 为什么说不能改变啊 String 型的数据,长度一但改变,看下楼上的例子,这样a的内存地址就改变了。要解决这种“字符串内容变了,内存地址不变”的问题,就要用到StringBuffer StringBuffer a=new StringBuffer; a.append("abc");这时a的地址没有变化,没有产生新的对象,而:String a=new String();a="abc";这时a的地址发生了变化,指向新产生的对象,而原来new的那个对象成了垃圾。 简单点说吧所谓的不变是指:string类型的变量所指向的内存单元中的内容(是内容)不变,无论对内容怎样操作,只可能会增加新的string型对象,而原来的内容不会被修改。所谓可变是指: stringbuffer是可以在原有的内容上修改,而无需生成新的对象。当然,string类型的变量可以重新指向其他的内存空间,只要不是句柄不是final就可以。但,一旦确定下来指向某个内存单元空间后,其中的内容是不可修改的。 只要不是句柄不是final就可以==========================修改为只要句柄不是final就可以 String 是存储在字符池中,是不可改变的。。对String做任何操作后都产生新对象,引用指向新的对象,而不是操作原对象。。对String操作频繁时建议使用StringBuffer String a="abc"; a="abcd";在内存里面会有两个存储区,"abc" 和 "abcd"执行a = "abcd"创建"abcd" 时a指向"abcd"而不是改变"abcd" 1.String和StringBuffer的区别? String类代表字符串,字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串StringBuffer类是可变字符序列.这到问题没啥可说的了 楼上都解释的很好.2.String a= "abc "; String a= "abcde " 都说String长度不可变,这个例子应该怎么理解 EG: String a= "abc "; a= "abcde "举个例子,当然要结合你问问题1的答案来理解. 比如有一个监狱关押制度是String这个形式的监狱a , 我放进去一个abc的罪人.他必须自己一个屋子。后来我有要放进去一个犯人 abcde.他当然也是自己一个屋子 .因为他已经是STRING这个形式的监狱.规则不可改变.他两进的同一个监狱,但不代表他两是一个屋子.3.给我举一个StringBuffer该变长度的例子StringBuffer sb = new StringBuffer(); sb.append( "a "); sb.append( "b "); append的方法很多不同类型的参数追加到序列中 Java内部类对象对外部类对象引用的问题. 多线程问题 Java Socket通讯问题,分不是问题 关于java绘图问题?????? swing面板间参数传递 java简单问题,狂散分了 图形界面显示问题,谢谢! 复杂的参变量 从文本区读数据的问题!与课程设计有关,在线等! 急呀,jaxp 的 jar 文件在websphere中要怎样配置呢??? 用正则式来提取数据 一个关于FlowLayout的问题
String a= "abc ";
String a= "abcde "
和以下两句是等价的:
String a=new String("abc");
String a=new String("abcde");StringBuffer是可变的。它有两个方法提供改变,一个是append,另一个是insert。
sb.append("abc");
sb.append("de");String s = sb.toString();StringBuffer是为了执行大量的字符串链接操作,避免直接"abc"+"de"操作时产生的无用字符串实例。
String a= "abc ";
a= "abcde " ;
为什么说不能改变啊
要解决这种“字符串内容变了,内存地址不变”的问题,就要用到StringBuffer
a.append("abc");
这时a的地址没有变化,没有产生新的对象,而:
String a=new String();
a="abc";
这时a的地址发生了变化,指向新产生的对象,而原来new的那个对象成了垃圾。
所谓的不变是指:string类型的变量所指向的内存单元中的内容(是内容)不变,无论对内容怎样操作,只可能会增加新的string型对象,而原来的内容不会被修改。
所谓可变是指: stringbuffer是可以在原有的内容上修改,而无需生成新的对象。当然,string类型的变量可以重新指向其他的内存空间,只要不是句柄不是final就可以。但,一旦确定下来指向某个内存单元空间后,其中的内容是不可修改的。
==========================
修改为
只要句柄不是final就可以
对String做任何操作后都产生新对象,引用指向新的对象,
而不是操作原对象。。
对String操作频繁时建议使用StringBuffer
a="abcd";
在内存里面会有两个存储区,
"abc" 和 "abcd"
执行a = "abcd"创建"abcd" 时a指向"abcd"而不是改变"abcd"
String类代表字符串,字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串
StringBuffer类是可变字符序列.
这到问题没啥可说的了 楼上都解释的很好.
2.String a= "abc ";
String a= "abcde "
都说String长度不可变,这个例子应该怎么理解
EG: String a= "abc ";
a= "abcde "举个例子,当然要结合你问问题1的答案来理解. 比如有一个监狱关押制度是String这个形式的监狱a , 我放进去一个abc的罪人.他必须自己一个屋子。后来我有要放进去一个犯人 abcde.他当然也是自己一个屋子 .因为他已经是STRING这个形式的监狱.规则不可改变.他两进的同一个监狱,但不代表他两是一个屋子.
3.给我举一个StringBuffer该变长度的例子StringBuffer sb = new StringBuffer();
sb.append( "a ");
sb.append( "b ");
append的方法很多不同类型的参数追加到序列中