Странное поведение объекта / класса в Java - PullRequest
0 голосов
/ 06 марта 2011

У меня есть массив Group.Когда я вызываю increment, для увеличения 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++;
    }

Ответы [ 3 ]

3 голосов
/ 06 марта 2011
for (int i=1; i<g;i++){
    groups[i] = groups[i-1];
    groups[i].increment();
}

Каждый индекс вашего массива ссылается на один и тот же объект группы.

1 голос
/ 06 марта 2011

Есть две проблемы.

Сначала метод инкремента фактически не работает.Вероятно, это должно быть:

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

В противном случае это на самом деле не изменится.

Вторая проблема уже упоминалась в других ответах, то есть фактически у вас есть только один объект группы и несколькоссылки на этот один объект.

1 голос
/ 06 марта 2011

Потому что вы просто копируете ссылки на все элементы массива. Все элементы содержат один и тот же экземпляр Group, но разные ссылки.

Вы должны либо создавать новый объект Group каждый раз в цикле, либо использовать конструктор копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...