创建具有相同名称的变量 带循环 vs 不带循环



以下代码有什么区别。

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。另外,我认为您忘记在括号内添加i customerReqRespEntity.setEntryId(++);>customerReqRespEntity.setEntryId(i++);
更重要的是,如果您仅在循环中使用它,您可能不需要 i 变量,而是可以使用迭代器x>customerReqRespEntity.setEntryId(x);

范围

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

我认为您无法编译第二个变量,因为您多次使用变量名。

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

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

使用循环

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

最新更新