使用loop vs without loop创建具有相同名称的变量

时间:2017-06-14 05:22:55

标签: java list loops variables

以下代码有什么区别..

int i=0;
List<CustomerReqRespEntity> customerReqRespEntities=new ArrayList<>();
for(int x=0;x<4;x++){
   CustomerReqRespEntity customerReqRespEntity=new CustomerReqRespEntity();
   customerReqRespEntity.setEntryId(++);
   customerReqRespEntities.add(customerReqRespEntity);
}

// --------------------------------------------- ------------------------------

int i=0;
List<CustomerReqRespEntity> customerReqRespEntities=new ArrayList<>();
CustomerReqRespEntity customerReqRespEntity=new CustomerReqRespEntity();
customerReqRespEntity.setEntryId(i++);
customerReqRespEntities.add(customerReqRespEntity);

CustomerReqRespEntity customerReqRespEntity=new CustomerReqRespEntity();
customerReqRespEntity.setEntryId(i++);
customerReqRespEntities.add(customerReqRespEntity);

CustomerReqRespEntity customerReqRespEntity=new CustomerReqRespEntity();
customerReqRespEntity.setEntryId(i++);
customerReqRespEntities.add(customerReqRespEntity);

CustomerReqRespEntity customerReqRespEntity=new CustomerReqRespEntity();
customerReqRespEntity.setEntryId(i++);
customerReqRespEntities.add(customerReqRespEntity);

4 个答案:

答案 0 :(得分:5)

我认为没有区别。但是,使用循环编写将提供更好的维护机会,因为在出​​现错误或任何其他情况时,您只需要修改单个块,而不是修改4.另外我认为您忘记在括号内添加icustomerReqRespEntity.setEntryId(++); &gt; customerReqRespEntity.setEntryId(i++);中 更重要的是,您可能不需要i变量,如果仅在循环内部使用它,则可以使用迭代器x &gt; customerReqRespEntity.setEntryId(x);

答案 1 :(得分:1)

范围很重要@Siddappa Walake。在第一部分中,您的实例在for loop内创建,这使它们成为该循环的本地实例,因此无法在循环外访问。在第二部分中,它不是在循环中创建的,我猜测它们是在方法中创建的,如果是这种情况,那么它们在整个方法中可用,并且可以作为一个方法传递给另一个方法参数。

答案 2 :(得分:0)

我认为你不能编译第二个,因为你不止一次使用变量名。

第一个代码中的循环有自己的范围,这意味着所有变量仅在每次迭代中有效,并在循环结束时被丢弃。

答案 3 :(得分:0)

您应该尽可能使用方法或循环。它们缩短了代码,消除了冗余,并使调试更容易。尽管你的误差很小(setEntryId(++)),但它们都会产生相同的效果。

使用循环尤其是一种更好的做法,因为如果你想制作100个对象,使用循环将很多减少工作量; 5行和350行(猜测)之间的差异是相当大的差距。因此,您的第一个选项更好,但运行它时没有任何区别。