我正在尝试创建一个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;
}
}
答案 0 :(得分:5)
您的问题是name
实例变量被声明为static,使其成为类变量。对该类的每个实例都将更改对名称的任何更改。您需要从name
和total
中删除静态标识符,您的代码才能正常工作。
答案 1 :(得分:3)
目前这些变量为static
,这意味着它们将保留最后分配的值。
private static String name;
private static double total;
您需要将这些字段设为 instance 变量:
private String name;
private double total;
答案 2 :(得分:1)
您的字段是静态的。如果您希望它们能够为该类的每个实例存储名称和总计的单独实例,则它们不应该是。