日期:2014-05-20  浏览次数:20700 次

for前声明,内定义
List   list   =   new   ArrayList();
Bean   bean   =   null;
for(int   i=0;i <5;i++){
      bean   =   new   Bean();
      bean.set();
      bean.set();
      list.add(bean);
}
问:
1)为什么要在for外声明,在里面定义
2)循环了5次,在内存中分别分配了5个地址,还是始终就是一个
3)如果上面的换成了下面,放在里面声明,定义与上面有什么区别吗?如果有,可以给讲一下原因吗?
List   list   =   new   ArrayList();
for(int   i=0;i <5;i++){
      Bean   bean   =   new   Bean();
      bean.set();
      bean.set();
      list.add(bean);
}

------解决方案--------------------
2.你的Bean在list里面完全是一样的,即指向了同一个Bean
3.你定义的Bean是5个不同的存放在List中。

------解决方案--------------------
有区别,上面的代码省内存,一直就用一个bean的空间。下面的代码,相当于每循环一次 分配一个bean空间,占内存。
------解决方案--------------------
没什么区别,内存消耗一样:
new XXX才占用内存,而两种做法用的new是一样的次数。
区别只是第一种方法用了一个引用依次指向5个内存区
第二种方法用了5个引用分别指向5个内存区
(有一点像c语言中的指针)