这是代码
for (int i = 0; i < len; i++) {
prpSitemKindd.setKindCode("0302");/*险别代码*/
prpSitemKindd.setKindName(infoTpy.getInsuranceList().get(i).getInsuranceType());/*险别名称*/
prpSitemKindd.setAmount(infoTpy.getInsuranceList().get(i).getAmount());/*保险金额*/
prpSitemKindd.setPremium(infoTpy.getInsuranceList().get(i).getInsurancePremium());/*应缴保费*/
prpSitemKindss.add(prpSitemKindd);
}
第一次循环
第二次
第二次会把第一次的值覆盖 两个都是第二次的值
得怎么写
你第一次插入的时候prpSitemKindd中存放的是第一次的值,但是你没有放开prpSitemKindd,第二次插入的时候,prpSitemKindd为第二次存放的值,
不论循环几次,prpSitemKindd中存放的都是最后一个数据值,所以就等于将最后一个数据值,循环插入进去。可以使用楼上的解决方法,不过对内存
消耗过大,创建n个prpSitemKindd对象;建议将prpSitemKindd对象放在for循环外面定义,在for里面调用。例如:
prpSitemKindd PrpSitemKindd=null;
for里面prpSitemKindd = new PrpSitemKindd;这样调用,如果你用的是spring框架,可以使用注入方式,避免new。
for (int i = 0; i < len; i++) {
prpSitemKindd.setKindCode("0302");/*险别代码*/
prpSitemKindd.setKindName(infoTpy.getInsuranceList().get(i).getInsuranceType());/*险别名称*/
prpSitemKindd.setAmount(infoTpy.getInsuranceList().get(i).getAmount());/*保险金额*/
prpSitemKindd.setPremium(infoTpy.getInsuranceList().get(i).getInsurancePremium());/*应缴保费*/
prpSitemKindss.add(prpSitemKindd);
}
java基础知识,你每次set的都是同一个对象的属性,然后又将这个对象add进集合,最终集合里面存放的n个变量都是指向堆中的同一个对象,这个对象的属性就是你
最后一次set的属性。
所以在每次循环的时候,你需要在堆中重新创建一个对象用来set属性。而不是每次重复set同一个对象。
建议有空看看《深入理解java虚拟机》这本书