Могут ли методы мутатора применяться к объектам в ArrayList?

#java #arrays #mutation

#java #массивы #мутация

Вопрос:

У меня возникли некоторые проблемы с моей Java-программой, и я не уверен, что это проблема, но будет ли вызов метода mutator для объекта внутри arraylist работать так, как задумано?

Например

 public class Account
{
    private int balance = 0;

    public Account(){}

    public void setAmount(int amt)
    {
         balance = amt;
    }
}


public class Bank
{
    ArrayList<Account> accounts = new ArrayList<Account>();

    public staic void main(String[] args)
    {
        accounts.add(new Account());
        accounts.add(new Account());
        accounts.add(new Account());

        accounts.get(0).setAmount(50);
    }
}
  

Будет ли это работать так, как задумано, или есть что-то, что могло бы привести к тому, что этого не произойдет?

Ответ №1:

Проблема в том, но будет ли вызов метода мутатора для объекта внутри ArrayList работать так, как задумано?

Да, если вы намерены обновить первую учетную запись в списке. Имейте в виду, что список массивов хранит не объекты, а ссылки на объекты.Изменение одного из объектов не изменит ссылку, хранящуюся в списке.

Первая учетная запись будет обновлена, и при повторном обращении accounts.get(0) к ней будет показан обновленный баланс.

Вот ideone.com демонстрация этого. (Я только что исправил несколько незначительных опечаток, таких как добавление static перед accounts объявлением.)

 for (int i = 0; i < accounts.size(); i  )
    System.out.println("Balance of account "   i   ": "  
                       accounts.get(i).balance);
  

выдает

 Balance of account 0: 50
Balance of account 1: 0
Balance of account 2: 0
  

надеюсь, это то, чего вы ожидаете.

Ответ №2:

Да, это должно работать так, как задумано. Это ничем не отличается от:

 Account firstAccount = accounts.get(0);
firstAccount.setAmount(50);
  

Помните, что метод ArrayList get() возвращает фактический объект, хранящийся в ArrayList , а не его копию.