#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
, а не его копию.