论坛首页 Java企业应用论坛

java 内存 作用域 clone 对象

浏览 3513 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-09-15  

for(Bean b : product.BeanMap().values()){
     Bean bean = (Bean) ObjectUtils.clone(b);
     product.getAreaMap().put(b.getArea(), bean);
 }

 

请问:上述代码中紫色代码的作用是复制这个对象,如果没有这句不行吗,我直接这样写为什么不行

for(Bean b : product.BeanMap().values()){
      product.getAreaMap().put(b.getArea(), b);
 }

好像是内存作用域的原因,但对于这个原因我比较模糊,请各位指点!

   发表时间:2014-09-15  
这样问谁知道你的“行不行”怎么定义。。。

for(Bean b : product.BeanMap().values()){
     Bean bean = (Bean) ObjectUtils.clone(b);
     product.getAreaMap().put(b.getArea(), bean);
}

这儿复制的作用是让两个map里面放的value不会引用到相同的对象
0 请登录后投票
   发表时间:2014-09-17   最后修改:2014-09-17
你的意思是我的代码写的不完整是吗,让大家不好理解?!下次我改正

对于你的这句话“这儿复制的作用是让两个map里面放的value不会引用到相同的对象”,我再问一句:我让这两个map里面放的value引用相同的对象,这样对功能有什么影响吗,这样做是不是第二个map就无法存这个对象了呢
0 请登录后投票
   发表时间:2014-09-17  
静夜独窗 写道
你的意思是我的代码写的不完整是吗,让大家不好理解?!下次我改正

对于你的这句话“这儿复制的作用是让两个map里面放的value不会引用到相同的对象”,我再问一句:我让这两个map里面放的value引用相同的对象,这样对功能有什么影响吗,这样做是不是第二个map就无法存这个对象了呢


引用到相同的对象意味着对这个对象在任何地方的改动都会影响到两个map,这样够清楚了吧。。。 您还是先补补java基础吧
0 请登录后投票
   发表时间:2014-09-18  
for(Bean b : product.BeanMap().values()){
     Bean bean = (Bean) ObjectUtils.clone(b);
     product.getAreaMap().put(b.getArea(), bean);
}
这样说会不会更好呢:for循环里面的BeanMap出了for循环就超出作用域释放掉了,如果
product.getAreaMap().put(b.getArea(), b);这样写,在BeanMap释放掉后(map中的数据也跟着释放了),b对象就会指向null,AreaMap存的值就是null了,所以我们要clone一个新对象放在内存中
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics