2

我正在尝试将对象(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);
       }

这只会创建一个 (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);
       }

这将创建多个对象,添加 9 个具有差异值的差异对象。

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

如何避免这种情况?

提前致谢。

4

3 回答 3

1

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

  1. 创建一个新对象 循环开始
  2. 一些值被设置到对象中。
  3. 对象被添加到列表中。(即,在列表中引用)

在第二次迭代中,当值发生变化时,它会在步骤 1 中创建的对象中发生变化,该对象在列表中引用了 10 次。

希望这可以澄清。

于 2013-05-13T05:46:31.070 回答
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);对象添加到 list 中,无论其状态是否更改或者它是同一个对象。因为它是一个列表而不是一个不允许重复的 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 次。

于 2013-05-13T05:55:51.983 回答
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”,它也不会对内存泄漏产生任何影响。

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

于 2013-05-15T14:11:04.103 回答