问个java对象的问题

sideking 2010-04-12 11:04:13
Map m=new HashMap();
StringBuffer str1=new StringBuffer("123");
m.put("name",str1);


StringBuffer str2=(StringBuffer)m.get("name");
// str2=new StringBuffer("555"); //这边不能改变str1
str2.append("666"); //为什么这边可以改变str1的值 ,上面确不行?


System.out.println(str1);
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbyst 2010-04-13
  • 打赏
  • 举报
回复
StringBuffer str2=(StringBuffer)m.get("name");

这句话就已经把str1和str2指向了相同的内存空间

// str2=new StringBuffer("555"); //这边不能改变str1

而这句话把str2指向了新的内存空间

这样能好理解一些吧楼主~~
星辰企业 2010-04-12
  • 打赏
  • 举报
回复 1
第一种当然是不能改的 是为str1与str2的引用不同了! 改变的只是str2的值,
第二种可以是因为str1与str2的引用是相同的所以改了str2就改了str1了!
毛毛的IT生涯 2010-04-12
  • 打赏
  • 举报
回复
StringBuffer为引用传递,所以第二种会改变值,但是如果你new一个的话,他俩不是一个对象,改了第二个,对原先的不会有任何影响
longmei998 2010-04-12
  • 打赏
  • 举报
回复
路过!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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