2011-03-06 106 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对象和许多对这个对象的引用。