【问题标题】:Weird Object/class behaviour in JavaJava中奇怪的对象/类行为
【发布时间】:2011-03-06 00:26:42
【问题描述】:

我有一个组数组。当我调用增量时,为了增加对象的 id(在 A 中),数组中所有对象的所有 ID 都在递增。请问有人知道为什么吗?

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

【问题讨论】:

  • this.groupid++ 不应分配回this.groupid
  • 欢迎来到 Stack Overflow! groupid 是否被标记为 static?这将解释你的行为。您能否将其余代码发布给Group,以便更轻松地追踪错误?

标签: java arrays object


【解决方案1】:
for (int i=1; i<g;i++){
    groups[i] = groups[i-1];
    groups[i].increment();
}

数组的每个索引都指向同一个 Group 对象。

【讨论】:

  • 是的,组 0 的 ID = 1;
  • 那么组 1 的 ID = 2 等等。但一切仍然等于分配的最高 ID
【解决方案2】:

因为您只是复制对数组所有元素的引用。所有元素都包含相同的 Group 实例,但引用不同。

您应该在每次循环中创建一个新的 Group 对象或使用复制构造函数。

【讨论】:

    【解决方案3】:

    有两个问题。

    首先,增量方法实际上不起作用。应该是:

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

    否则它实际上不会改变。

    其他答案已经提到了第二个问题,即您实际上只有一个 Group 对象和对该对象的许多引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多