2

Java プログラムで問題が発生しています。これが問題かどうかはわかりませんが、配列リスト内のオブジェクトでミューテーター メソッドを呼び出すと、意図したとおりに機能しますか?

例えば

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

これは意図したとおりに機能しますか、それとも機能しない原因がありますか?

4

2 に答える 2

2

問題はありますが、ArrayList 内のオブジェクトでミューテーター メソッドを呼び出すと、意図したとおりに動作しますか?

はい、リストの最初のアカウントを更新することを意図している場合。配列リストはオブジェクトではなく、オブジェクトへの参照を格納することに注意してください。オブジェクトの 1 つを変更しても、リストに格納されている参照は変更されません。

最初のアカウントが更新され、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

うまくいけば、これはあなたが期待するものです。

于 2011-05-28T19:05:26.070 に答える
2

はい、意図したとおりに動作するはずです。それは以下と同じです:

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

ArrayListのメソッドは、コピーではなく、 にget()格納されている実際のオブジェクトを返すことに注意してください。ArrayList

于 2011-05-28T19:05:46.070 に答える