Java - 如果我更改列表中的项目,列表中的对象是否也会更改?

时间:2012-03-06 23:19:37

标签: java arraylist

我知道之前可能已经提到过,但我找不到具体问题的具体答案。我已经尝试掌握Java对引用的处理,但这仍然困扰着我。请考虑以下事项:

public class Question
{
    private boolean isCorrect;

    public void setCorrect (boolean _isCorrect) {
        isCorrect = _isCorrect;
    }
}

现在,在另一个文件中,代码中的某个地方:

/**
* questionList is List<Question> questionList = new ArrayList<Question>();
* With various Question's added already with various isCorrect values.
*/
for (int i = 0; i < questionList.size(); i++) {
    Question q = (Question) questionList.get(i);
    q.setCorrect(true);
}

这会将isCorrect中的每个问题的questionList设置为 true 吗?我理解Java(我不认为我这样做)应该。但是吗?

谢谢

5 个答案:

答案 0 :(得分:2)

是的,它会的。这是两个地方引用的相同对象。

答案 1 :(得分:0)

是。您应该从Java Tutorial中了解指针和引用。 List包含指向存储Question的内存中的插槽的指针。因此,对指针执行操作,您正在对内存中的sot采取操作

答案 2 :(得分:0)

是的,确实如此。理解这个

Question q = (Question) questionList.get(i);

q只是Question类型的引用,它引用get返回的基础对象。不会隐式创建对象的副本。

答案 3 :(得分:0)

是的,因为变量q指向内存列表中的对象。因此,您在q上调用的任何方法都会在内存中的对象上调用。

答案 4 :(得分:-1)

它应该改为true,但为了速度,为什么不呢:

   for(int loop = 0; i < questionList.size(); loop++){
       questionList.get(loop).setCorrect(true);
   }