我对于对象创建有一些疑问/问题。我听说过 不应在循环中创建对象。什么是创造的错误 循环内的对象?什么是在循环外创建之间的区别 并在循环内创建?
请考虑以下示例。
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 ;
}
请建议我必须遵循哪种方式?
答案 0 :(得分: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;
}
答案 1 :(得分: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
的范围也在循环的一边。在您只是在集合中插入对象的情况下,方法1更好,因为如果您使用方法2,所有对象在插入objectList
后将逐个符合垃圾收集资格,那么obj
具有参考在i = 999时将创建的最后一个对象,并且收集器将在循环之后检查obj
的引用是否可达,表示它扫描整个。
答案 2 :(得分: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;
}
答案 3 :(得分: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;
}