在循环中创建对象的新实例以添加到列表中
我试图将对象(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次。
- 创建一个新对象循环启动
- 某些值设置到对象中。
- 对象被添加到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',它也不会对内存泄漏产生任何影响。
如果您在实时应用程序中遇到问题,请概述您所面临的应用程序和问题。