2

我正在尝试创建一个 Person 数组(一个具有变量字符串名称和双倍总数的类)。但是由于某种原因,创建第二个 Person 会替换(?)第一个人。. .

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实例变量被声明为静态,使其成为类变量。该类的每个实例都将更改名称的任何更改。您需要从中删除静态标识符 nametotal您的代码将正常工作。

于 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 回答