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

我试图将对象(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个,每次发出请求时会怎么样? 那么它在内存中的转储吧?

怎么避免这个?

提前致谢。

当你这样做

  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次。

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

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

在第二次迭代中,当值改变时,它在步骤1中创建的对象中被更改,该对象在列表中被引用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); type = null; } 

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

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