2

私は Person の配列を作成しようとしています (変数 String name と double total を持つクラス)。しかし、何らかの理由で、2 番目の人物を作成すると、最初の人物が置き換えられます (?)。. .

Person[] p = new Person[40];
    
p[0] = new Person("Jango", 32);
p[1] = new Person("Grace", 455);
    
System.out.println( p[0].getName() );
System.out.println( p[1].getName() );
System.out.println( p[0].equals(p[1]) );

出力は次のとおりです。

Grace
Grace
false

なぜそうではないのですか:

Jango
Grace
false

????????????

public class Person {

    @SuppressWarnings("unused")
    private Person next;
    private String name;
    private double total;

    public Person(String _name)
    {
        name = _name;
        total = 0.0;
        next = null;
    }

    public Person(String _name, double _total)
    {
        name = _name;
        total = _total;
        next = null;
    }

    public String getName()
    {
        return name;
    }
}
4

3 に答える 3

6

あなたの問題は、nameインスタンス変数が静的として宣言され、クラス変数になっていることです。名前を変更すると、そのクラスのインスタンスごとに変更されます。静的識別子を削除する必要が nameありtotal、コードは正常に動作します。

于 2012-12-21T21:22:11.870 に答える
3

現在、これらの変数はstatic、最後に割り当てられた値を保持することを意味します。

private static String name;
private static double total;

これらのフィールドをクラスインスタンス変数にする必要があります。

private String name;
private double total;

インスタンスとクラス メンバーについてを参照してください。

于 2012-12-21T21:22:48.550 に答える
1

あなたのフィールドは静的です。クラスの各インスタンスの名前と合計の個別のインスタンスを格納できるようにする場合は、そうしないでください。

于 2012-12-21T21:24:29.783 に答える