2012-12-21 120 views
2

我想創建一個Person的數組(一個類與變量字符串名稱,和總數)。但由於某種原因,創建第二個人會替換(?)第一個人。 。 。自定義Java對象數組

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; 
    } 
} 
+6

你能向我們展示人類嗎?也許你使用一個靜態變量來存儲名稱? – Henry

+0

我們可以看到Person類嗎? – Joel

+0

你能告訴我們Person的構造函數嗎? –

回答

5

您的問題是name實例變量被聲明爲靜態的,使其成爲一個類變量。對於該類的每個實例,任何更改名稱都將被更改。您需要從nametotal中刪除靜態標識符,並且您的代碼將正常工作。

+0

如果它們是靜態的,它們不是實例變量。所以你的陳述是矛盾的。 –

+0

那麼,名稱將是一個Person類的實例變量..這就是他正在試圖做的..這就是爲什麼我使用這個詞。 – Joel

+0

如果它們是靜態的,它們是類變量,而不是實例變量。不是嗎? –

3

當前這些變量是static這意味着他們將保留最後分配的值。

private static String name; 
private static double total; 

你需要讓這些字段類實例變量:

private String name; 
private double total; 

Understanding Instance and Class Members

1

你的領域是靜態的。如果你希望他們能夠爲類的每個實例存儲一個名稱和總數的單獨實例,它們不應該是。