mutator方法可以应用于ArrayList中的对象吗?

时间:2011-05-28 19:03:23

标签: java arrays mutation

我的java程序遇到了一些麻烦,我不确定这是不是问题,但会在araylist中的对象上调用mutator方法吗?

例如

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);
    }
}

这会按预期工作还是会导致这种情况发生?

2 个答案:

答案 0 :(得分:2)

  

问题是但是在ArrayList内的对象上调用mutator方法是否按预期工作?

是的,如果您打算更新列表中的第一个帐户。 请记住,数组列表不存储对象,但引用到对象。对其中一个对象进行变换不会更改列表中存储的引用。

第一个帐户将会更新,再次引用accounts.get(0)时,它会显示更新后的余额。

这是展示它的ideone.com demo。 (我刚刚修改了一些小错字,例如在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
希望这是你所期望的。

答案 1 :(得分:2)

是的,这应该按预期工作。它没有什么不同:

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

请记住,ArrayList的{​​{1}}方法会返回get()中存储的实际对象,而不是它的副本。