2017-06-14 72 views
-2

是什么下面的代码之间的区别..创建具有相同名称的变量与循环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); 
+2

一个使用循环,另一个不使用循环? –

+3

没有人,上面的一个缺少一个x,并且更干......(例如,如果你想要1000个,会发生什么?(总是使用循环) –

+2

第一个不会因为语句'customerReqRespEntity.setEntryId(++);' – Harmlezz

回答

5

没有区别,因为我看到它。但是使用循环编写将提供更好的维护机会,因为在发生错误或任何其他情况下,您只需要修改单个块而不是修改4.另外,我认为您忘记在customerReqRespEntity.setEntryId(++);的内部添加i>customerReqRespEntity.setEntryId(i++);
更重要的是,你可能不需要i变量,如果你使用它只在循环里,而不是你可以使用你的迭代x>customerReqRespEntity.setEntryId(x);

+1

不仅如此,使用method2创建几千个objs是相当有趣的;) –

+1

@Jonasw它是,我曾经创建10+代码行,而不是使用3行循环。想要为自己打耳光... – Hatik

+0

@Jonasw没有看到你的观点。循环会创建相同数量的对象... –

0

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

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

+0

考虑以下片段,customerReqRespEntity上的最后更新将在列表中反映出来,好像在循环中创建了相同的customerReqRespEntity,它将保留相应的更新。 \t \t int i = 0; \t \t List customerReqRespEntities = new ArrayList <>(); \t \t CustomerReqRespEntity customerReqRespEntity = new CustomerReqRespEntity(); (int x = 0; x <4; x ++){ \t \t { \t \t \t customerReqRespEntity.setEntryId(i ++); \t \t \t customerReqRespEntities.add(customerReqRespEntity); \t \t} –

0

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

+0

谢谢阿伦。我明白了。 –

0

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

使用循环尤其是一种更好的做法,因为如果您想制作100个对象,使用循环将会是很多较少的工作; 5线和350线(猜测)之间的差距是相当大的差距。因此,你的第一个选择是更好的,但它运行时没有什么不同。

相关问题