Java - Если я изменю элемент в списке, будет ли изменен и объект в списке? - PullRequest
1 голос
/ 07 марта 2012

Я знаю, что, возможно, об этом уже спрашивали, но я не могу найти конкретный ответ на мой конкретный вопрос.Я уже пытался понять обработку ссылок 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 в правда ?Как я понимаю Java (и я не думаю, что я понимаю), так и должно быть.Но разве это?

Спасибо

Ответы [ 5 ]

2 голосов
/ 07 марта 2012

Да, будет.На один и тот же объект ссылаются в двух местах.

0 голосов
/ 07 марта 2012

Должно быть изменено на true, но ради скорости, почему бы и нет:

   for(int loop = 0; i < questionList.size(); loop++){
       questionList.get(loop).setCorrect(true);
   }
0 голосов
/ 07 марта 2012

Да, потому что переменная q указывает на объект в списке в памяти.Поэтому любые методы, которые вы вызываете на q, вызываются для объекта в памяти.

0 голосов
/ 07 марта 2012

Да, это так.Поймите это

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

q - это просто ссылка типа Question, которая ссылается на базовый объект, возвращаемый get.Копия объекта не создается неявным образом.

0 голосов
/ 07 марта 2012

Да. Вы должны узнать об указателях и ссылках из Учебного руководства по Java. Список содержит указатели на ячейки памяти, в которых хранится Вопрос. Так что действуй по указателю, ты действуешь по соте в самой памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...