2012-07-06 234 views
1

我對創建對象有一些疑問/問題。我聽說 對象不應該在循環中創建。在循環內創建 對象有什麼問題?在循環 之外創建和在循環內部創建之間有什麼區別?java創建對象建議

請考慮下面的例子。

public java.util.List<Object> objectCreationTest(){ 
    java.util.List<Object> objectList =new java.util. ArrayList<Object>(); 
    Object obj = null; 
    for(int i = 0 ; i <1000;i++){ 
     Object e = new Object(); //1 --> Is this object creation wrong? 
     obj = new Object(); //2 --> Is this right way to create? 
     objectList.add(e); 

    } 

    return objectList ; 

} 

請問我要遵循哪種方式?

回答

5

我聽說不應該在循環中創建對象。什麼 循環內創建對象的錯誤?

在循環中創建對象沒有任何問題。有時候這是創建大量(相關)對象的唯一方法。

在你的榜樣,你可以簡單地做:

public java.util.List<Object> objectCreationTest(){ 
    java.util.List<Object> objectList = new java.util. ArrayList<Object>(); 
    for(int i = 0 ; i <1000;i++){ 
     Object e = new Object(); 
     objectList.add(e);  
    } 
    return objectList; 
} 
0

你的情況,你可以簡單地這樣做:

public java.util.List<Object> objectCreationTest(){ 
    java.util.List<Object> objectList = new java.util. ArrayList<Object>(); 
    for(int i = 0 ; i <1000;i++){ 
     objectList.add(new Object());  
    } 
    return objectList; 
} 
0

只有在聲明中的差異,而不是實際的創作。理論上兩者之間可能存在差異,但是它是如此之少,編譯器可能需要的是它。

在您的例子,你可以這樣寫:

public java.util.List<Object> objectCreationTest(){ 
    java.util.List<Object> objectList =new java.util. ArrayList<Object>(); 
    for(int i = 0 ; i <1000;i++){ 
     objectList.add(new Object());  
    } 
    return objectList; 
} 
2

兩種方法都是正確的,但不同的是的obj和垃圾收集範圍。

public java.util.List<Object> objectCreationTest(){ 
java.util.List<Object> objectList =new java.util. ArrayList<Object>(); 
Object obj = null; 
for(int i = 0 ; i <1000;i++){ 
    Object e = new Object(); //1 --> Is this object creation wrong? 
    obj = new Object(); //2 --> Is this right way to create? 
    objectList.add(e); 

} 

return objectList ; 

} 

在案件obj 1米範圍內唯一循環for,這將是一次循環循環結束後,將有資格進行垃圾回收可達出來的一面。如果obj的情況2範圍也在循環的外側。在你的情況,你只是插入在徵收方式對象1比較好,因爲所有的對象將在objectList插入後符合垃圾收集逐一如果使用方法2則obj具有將被創建時的參考去年對象i = 999並且收集器將在循環之後檢查obj的引用是否可到達意味着它掃描整個。