2017-06-14 41 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線(猜測)之間的差距是相當大的差距。因此,你的第一個選擇是更好的,但它運行時沒有什麼不同。

相關問題