Java Can';是否在ArrayList中添加对象?

Java Can';是否在ArrayList中添加对象?,java,optimization,Java,Optimization,您好,我正在尝试将一个对象添加到Arraylist中,我正在使用Java。但它并没有像我预期的那样起作用 假设我们有一个类句子,所以代码看起来像 ArrayList<Sentence> result = new ArrayList<Sentence>(); for (int i =0; i<10;i++) { Sentence s = new Sentence(i.toString(),i); //there is a string and an i

您好,我正在尝试将一个对象添加到Arraylist中,我正在使用Java。但它并没有像我预期的那样起作用

假设我们有一个类
句子
,所以代码看起来像

ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    Sentence s = new Sentence(i.toString(),i);
    //there is a string and an int in this Sentence object need to be set
    result.add(s); 
}
ArrayList结果=新建ArrayList();

for(int i=0;i您的
s
变量始终引用同一个对象。看起来您正在添加同一个对象10次,在for循环结束时,它的字符串将等于
“9”
且其int等于
9

在第二种情况下,您将向
ArrayList
中的单个
句子
实例添加10个指针

要在
ArrayList
中插入10个指针,必须使用10
语句

我认为您正在处理Java中的按值传递和按引用传递,为了澄清这一点,请看一看

也可能对您有所帮助。

ArrayList result=new ArrayList();
ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    result.add(new Sentence(i.toString(),i)); 
}

对于(int i=0;i以防止重复对象。在使用之前始终实例化它们。这样,您的列表将有n个唯一对象,

您确定结果“将变为空”吗?您应该获得一个包含10个对同一对象的引用的列表。这不是优化,您不需要它。您的意思是我的ArrayList将只获得一个对象吗?在我的示例之后,它将只获得具有
i=9
的对象。该列表将包含对单个
句子的10个引用。
句子将具有e
i=9
。是的,这就是我的意思。你需要调用构造函数n次以获得n个对象。你现在所做的只是对一个对象进行修改,并存储对它的n个引用。我明白了,所以在这种情况下,我无法避免创建这些新对象。当然,你需要在内存中创建10个
句子
对象。
ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    result.add(new Sentence(i.toString(),i)); 
}