自定义Java对象的数组

时间:2012-12-21 21:16:26

标签: java arrays object

我正在尝试创建一个Person数组(一个带有变量String name和double total的类)。但出于某种原因,创建第二个人取代(?)第一个人。 。

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 static String name;
    private static 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;
    }
}

3 个答案:

答案 0 :(得分:5)

您的问题是name实例变量被声明为static,使其成为类变量。对该类的每个实例都将更改对名称的任何更改。您需要从nametotal中删除静态标识符,您的代码才能正常工作。

答案 1 :(得分:3)

目前这些变量为static,这意味着它们将保留最后分配的值。

private static String name;
private static double total;

您需要将这些字段设为 instance 变量:

private String name;
private double total;

请参阅Understanding Instance and Class Members

答案 2 :(得分:1)

您的字段是静态的。如果您希望它们能够为该类的每个实例存储名称和总计的单独实例,则它们不应该是。