我正在尝试将对象(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个,每次发出请求时会怎样? 所以它在内存中转储了吗?
如何避免这种情况?
先谢谢。
答案 0 :(得分:1)
因为,当您将对象创建放在循环外部时,只会创建一个对象。因此,只有该对象被添加到列表中,尽管您尝试将其添加9次。
在第二次迭代中,当值发生变化时,它会在步骤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',也不会对内存泄漏产生任何影响。
如果您在实时应用程序中遇到问题,请概述您所面临的应用程序和问题。