在java中向ArrayList动态添加类对象

在java中向ArrayList动态添加类对象,java,Java,我知道如何将对象添加到ArrayList class LightBulb { int position; LightBulb(int position) { this.position = position; } } public class MainBulb { public static void main(String[] args) { LightBulb ob1 = new LightBulb(1);

我知道如何将对象添加到
ArrayList

class LightBulb {
    int position;
    LightBulb(int position) {
        this.position = position;
    }
}

public class MainBulb
{
    public static void main(String[] args) {
        
        LightBulb ob1 = new LightBulb(1);
        LightBulb ob2 = new LightBulb(2);
        LightBulb ob3 = new LightBulb(3);
        LightBulb ob4 = new LightBulb(4);
        LightBulb ob5 = new LightBulb(5);
        
        ArrayList<LightBulb> list = new ArrayList<LightBulb>(); 
        list.add(ob1);
        list.add(ob2);
        list.add(ob3);
        list.add(ob4);
        list.add(ob5);
    }
}
class灯泡{
内部位置;
灯泡(内部位置){
这个位置=位置;
}
}
公共级主灯泡
{
公共静态void main(字符串[]args){
灯泡ob1=新灯泡(1);
灯泡ob2=新灯泡(2);
灯泡ob3=新灯泡(3);
灯泡ob4=新灯泡(4);
灯泡ob5=新灯泡(5);
ArrayList=新建ArrayList();
列表。添加(ob1);
列表。添加(ob2);
列表。添加(ob3);
列表。添加(ob4);
列表。添加(ob5);
}
}
是否有一种方法可以在运行时使用循环添加对象,如下所示

int n = 100;
for(int i=0;i<n;i++) {
    LightBulb ob1 = new LightBulb(i);       // But here it is wrong as we are adding same object to the ArrayList
    list.add(ob1);
}
int n=100;

对于(int i=0;i,您的代码实际上是在给出输出。我相信您在为每个新创建的对象分配相同的对象名“ob1”时会感到困惑。如果您直接将动态创建的类对象添加到ArrayList中,而不创建对它的引用,则可以解决此问题。 按如下所示更改for循环

int n = 100;
for(int i=0;i<n;i++) {
    list.add(new LightBulb(i+1);        
}
int n=100;

for(int i=0;ijava中的new操作符总是创建一个新的java对象。您的示例确实是在创建新的灯泡。它们不是同一个对象。

您每次都在添加不同的对象。只要打印并检查一下,您就会明白。根据我对您的问题的理解,我将解释一个可能的误解

我认为您会感到困惑,因为您正在添加具有相同变量名的对象
ob1
。在Java中,当您使用
new
关键字时,它将创建一个新实例,因此每次迭代都会获得新对象

考虑在第一次迭代中是否有lightbulb1

ob1=lightbulb1.
但在第二次迭代中,ob1变量指向值为2的新对象,即

ob1=lightbulb2
如果循环结束,将重复此操作直到结束


因此,在每次迭代结束时,您的列表中会充满不同的对象。

您所说的“添加相同的对象”是什么意思。在循环中,您每次都在创建和添加一个类的新实例,而不是同一个实例。据我所知,您的循环应该按原样运行。您遇到了什么问题?您看到了什么情况,以及希望看到什么情况?如果您尝试运行代码,您可能会看到它已经在运行,节省了每个人的时间。@Andreas,我知道代码正在运行,但我认为这不是解决上述问题的正确方法。我理解这个概念,并且我相信,在分配的每个对象上添加相同的引用“ob1”不是解决问题的好方法。如果我错了,请指出问题所在。“我不认为这是一种正确的方式”这是一种正确的方式。或者更确切地说是一种正确的方式。--“添加相同的引用
ob1
”这不是相同的引用,因为循环的每次迭代都会对新的、不同的对象创建一个新的、不同的引用。--“不是解决问题的好方法“为什么使用局部变量不是一个好方法呢?我看OP的代码没有任何问题。在他的示例中,它也总是创建新的灯泡对象。@SKumar我知道代码正在工作,但在问题中这样的情况下,对许多对象使用相同的对象引用是否正确?@VyshakPuthusseri这不是任何问题“更正确"比您最初发布的要多。另外,要明确的是,您仍然在创建对对象的引用,只是没有创建名为obj1的变量。我理解这个问题。但是,我的疑问是:向运行时创建的对象添加相同的对象引用是否符合逻辑,如问题所示。@vyshakputhhusseri它不是同一个object reference。对象引用会随着每次循环迭代而变化。如果您引用的是对象名称。那么,是的,对象名称应该是有意义的。我可能会将其命名为bulb,也许。@VyshakPuthusseri如果您仍然有查询,您可能希望通读一遍-
ob1=lightbulb1.