String 和 StringBuffer的区别的一个问题 String类提供了数值不可改变的字符串这句话不是很理解.String str = new String("ABC");str="ddd";这样不就改变了str的值了么?程序也不报错,为什么说它提供了不可改变的字符串呢.谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【whh743】截止到2008-06-28 22:28:06的历史汇总数据(不包括此帖):发帖数:1 发帖分:5 结贴数:0 结贴分:0 未结数:1 未结分:5 结贴率:0.00 % 结分率:0.00 % 如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html 那是重新生成了一个新的字符串对象,而不是修改了。String 在内存一旦生成,就不会被修改,任何变动都会重新生成一个对象。 那原来的string对象会无用掉是不是?就是等着垃圾回收是不是 竹子说的对,建议楼主参考flyweight模式 小竹笋?我考,我以为java来了个新牛人,汗啊 String 不能初修改,而可以通过StringBuffer去改变String 不是改变,而是又重新创建了一个String。原来的被隐藏 str="ddd"; 这句是创建了个“ddd”字符串对象,然后再把这个对象的引用赋值给了str。而原来那个“ABC”对象并没有改变,只是str不在指向这个对象 你改的是 str引用的指向 指不过创建了一个ddd,再把str引向ddd而已,ABC并没有被改变啊,只是你看不到了 引用改变了,转向了ddd这个字符串~ String 和StringBuffer最大的区别就是StringBuffer的字符串可以改变 str是一个引用str="ddd";//这个引用指向新对象原对象被垃圾回收 str是一个引用 str="ddd";//这个引用指向新对象 原对象被垃圾回收 str对象引用的内存地址指向新的"ddd"所在的地址原对象"ABC"所占用内存空间仍然存在并不是"ABC"变了,而是str指向的内存地址便成了新的"ddd"所在的地址 String类提供了数值不可改变的字符串 意思是String类是被定义为final的类 String 的不可变,是说它不可被操作改变比如String str="abc";str="cde";str=str+"fgh";这些并没有改边"abc"这个字符串,它还存在于内存中(并且还生成了"cde","fgh","cdefgh"三个字符串对象),只有在适当时候(这个时间是不可预测的)被gc发现并回收而StringBuffer sbf=new StringBuffer("abc");对sbf进行操作:sbf.append("def");之后,内容为"abc"的这个StringBuffer就不存在于内存了,只有一个内容为"abcdef"的StringBuffer存在于内存 求一套讲的好的JAVA基础的视频和书,谁的比较好。还有编译工具。 -- * 求助 2011.11.7 * -- 关于 HttpClient 和 Cookie 的问题。 如何在同一个Frame的面板中显示不同的Frame? 两个关于 JavaScript 的问题。 请急于解决! 关于JAVA与数据库连接的问题. CSDN,怎么让这种垃圾当版主? eclipse连接mysql的问题 空格的转义字符是什么? 能不能用APPLET实现文件上传? 谁有Java的电子图书或实例或教程都可以,小弟我想学Java [Help] byte[]的比较 如果自己定义了一个异常类,那么传给这个类实参是什么呢??
楼主【whh743】截止到2008-06-28 22:28:06的历史汇总数据(不包括此帖):
发帖数:1 发帖分:5
结贴数:0 结贴分:0
未结数:1 未结分:5
结贴率:0.00 % 结分率:0.00 %
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
而原来那个“ABC”对象并没有改变,只是str不在指向这个对象
str是一个引用
str="ddd";//这个引用指向新对象
原对象被垃圾回收
str="ddd";//这个引用指向新对象
原对象被垃圾回收
原对象"ABC"所占用内存空间仍然存在并不是"ABC"变了,而是str指向的内存地址便成了新的"ddd"所在的地址
比如String str="abc";
str="cde";
str=str+"fgh";
这些并没有改边"abc"这个字符串,它还存在于内存中(并且还生成了"cde","fgh","cdefgh"三个字符串对象),只有在适当时候(这个时间是不可预测的)被gc发现并回收而StringBuffer sbf=new StringBuffer("abc");对sbf进行操作:sbf.append("def");之后,内容为"abc"的这个StringBuffer就不存在于内存了,只有一个内容为"abcdef"的StringBuffer存在于内存