2011-05-28 71 views
2

我遇到了一些麻烦,我的java程序,我不知道这是否是问题,但会调用araylist工作内的对象的增变器方法按预期?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); 
    } 
} 

将这项工作按预期或者是有什么,将导致此不?

回答

2

是问题,但会调用一个ArrayList中的对象的变种方法工作按预期工作?

是的,如果你的目的是要更新列表中的第一个帐户。 请记住,数组列表不存储对象,但将对象引用突变其中一个对象不会改变存储在列表中的引用。

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

这是一个ideone.com demo展示它。 (我刚刚修正了一些小的错别字,如在accounts声明前添加static

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

记住,ArrayListget()方法返回存储在ArrayList实际的对象,而不是它的一个副本。

相关问题