2011-03-06 138 views
0

我有一個Group數組。當我調用增量時,爲了增加對象的ID(在A中),數組中所有對象的所有ID都會增加。有人知道爲什麼請嗎?Java中奇怪的對象/類行爲

Group [] groups = new Group [g]; 
    groups[0] = group; 
    for (int i=1; i<g;i++){ 
     groups[i] = groups[i-1]; 
     groups[i].increment();    .......... A 

    } 


    public void increment() { 
     this.groupid = this.groupid++; 
    } 
+1

'this.groupid ++'不應該被分配回'this.groupid'。 – BoltClock 2011-03-06 00:30:03

+0

歡迎來到堆棧溢出! 「groupid」有沒有標記爲「靜態」?這將解釋你的行爲。你可以發佈你的'Group'代碼的其餘部分,以便更容易追蹤錯誤嗎? – templatetypedef 2011-03-06 00:30:28

+0

沒有什麼是靜態的 – Tyr 2011-03-06 00:33:51

回答

3
for (int i=1; i<g;i++){ 
    groups[i] = groups[i-1]; 
    groups[i].increment(); 
} 

您的陣列的各項指標是指在同一組對象。

+0

是的,組0已經得到ID = 1; – Tyr 2011-03-06 00:34:15

+0

那麼組1應該有ID = 2等等。但是Everything仍然等於分配的最高ID – Tyr 2011-03-06 00:34:56

1

因爲你只是複製引用到數組的所有元素。所有元素都包含相同的Group實例但不同的引用。

您應該每次在循環中創建一個新的Group對象或使用複製構造函數。

1

有兩個問題。

首先,增量方法實際上不起作用。它應該是:

public void increment() { 
    this.groupid++; 
} 

否則它不會實際上改變。

第二個問題已經被其他答案提到過,也就是說,實際上只有一個Group對象和許多對這個對象的引用。