我的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);
}
}
这会按预期工作还是会导致这种情况发生?
答案 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()
中存储的实际对象,而不是它的副本。