请教String与StringBuffer的区别(非JAVA 100问)

asui017 2011-07-11 04:41:15
有以下的疑问想请教各位一个正确的答案:

String strA="123" + "456" + "789" ;

String strB="123";
strB +="456";
strB +="789";

StringBuffer strC = new StringBuffer("123");
strC.append("456");
strC.append("789");
strC.toString();

上面这三种都各自产生了多少个对象?效率上如何排序?
如果可以的话请解析下内存分配上的变化过程,麻烦各位高人指点一下
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
the_ms 2011-07-11
  • 打赏
  • 举报
回复
受教了!
filemon 2011-07-11
  • 打赏
  • 举报
回复
String strA="123" + "456" + "789" ; 有两个对象,在编译的时候就直接转换生成了 "123456789"这个对象,新生成的 strA对象指向该对象的引用。
这个效率最快,因为在编译时数据就已经分配了。

String strB="123";
strB +="456";
strB +="789";
先生成 "123",再生成 "123456",再生成"123456789".生成的对象数自己数。

StringBuffer strC = new StringBuffer("123");
strC.append("456");
strC.append("789");
strC.toString();
1.先以"123"生成 StringBuffer对象.
2.再向 StringBuffer 中增加 "456" 对象不变
3.再向 StringBuffer 中增加 "789" 对象仍然不变
再转换成String对象。

对于第二种和第三种操作方法,早期是很推崇第三种操作方式,因为他们直接操作StringBuffer,不会生成新的对象,引用地址不需要更改,理论上效率更早。但在后来的Java版本是对字符串的操作进行了优化,在操作数据量不大的情况下,两者没有什么差别。很明显的说,第三种方式更省内存,效率上应该略高。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧