在循环中创建对象的新实例以添加到列表中

时间:2013-05-13 05:25:08

标签: java web-services object

我正在尝试将对象(JavaBean)添加到列表中。

     MyWebServiceRequest mywebService = new MyWebServiceRequest();
     MyRequestType type= new MyRequestType ();

       for(int i=0; i< 9; i++){
           type.setA(someDynamicValue);
           type.setB(someDynamicValue);
           mywebService.add(type);
       }

这只创建一个(类型)对象,因此它使用相同的数据添加相同的对象9次。

 MyWebServiceRequest mywebService = new MyWebServiceRequest();
   for(int i=0; i< 9; i++){
           MyRequestType type= new MyRequestType ();
           type.setA(someDynamicValue);
           type.setB(someDynamicValue);
           mywebService.add(type);
       }

这会创建多个对象,添加带有diff值的9个diff对象。

如果(for循环)在单个循环中创建数百个对象而不是9个,每次发出请求时会怎样? 所以它在内存中转储了吗?

如何避免这种情况?

先谢谢。

3 个答案:

答案 0 :(得分:1)

因为,当您将对象创建放在循环外部时,只会创建一个对象。因此,只有该对象被添加到列表中,尽管您尝试将其添加9次。

  1. 创建一个新对象 循环开始
  2. 将某些值设置到对象中。
  3. 将对象添加到列表中(即列表中引用)
  4. 在第二次迭代中,当值发生变化时,它会在步骤1中创建的对象中更改,该对象在列表中被引用10次。

    希望这澄清。

答案 1 :(得分:1)

当你这样做时

 MyWebServiceRequest mywebService = new MyWebServiceRequest();
   MyRequestType type= new MyRequestType ();

   for(int i=0; i< 9; i++){
       type.setA(1);
       type.setB(2);
       mywebService.add(type);
   }

mywebService.add(type);将对象添加到列表中,无论其状态是否更改,或者它是同一个对象。因为它是一个列表,而不是一个不允许重复的Map。

所以当你做

时,计数会变为10
 MyWebServiceRequest mywebService = new MyWebServiceRequest();


   for(int i=0; i< 9; i++){
       MyRequestType type= new MyRequestType ();
       type.setA(1);
       type.setB(2);
       mywebService.add(type);
   }

代码现在创建一个新对象并添加到列表中,但每个对象都不同。 两个片段的唯一区别是,第二个片段中的对象不相同,但在第一个片段中相同但添加了10次。

答案 2 :(得分:1)

MyWebServiceRequest mywebService = new MyWebServiceRequest();
for(int i=0; i< 9; i++){
   MyRequestType type= new MyRequestType ();
   type.setA(1);
   type.setB(2);
   mywebService.add(type);
   type = null;
}

如上所示将null设置为变量'type'不会对内存产生任何影响。因为,该对象已经被引用到您的列表中。因此,即使将null设置为变量'type',也不会对内存泄漏产生任何影响。

如果您在实时应用程序中遇到问题,请概述您所面临的应用程序和问题。