ArrayList статических переменных

Предположим, что у меня есть этот код.

public class Data {
    public static int x, y;
   //...
}
// ...
public static ArrayList myData = new ArrayList();

Теперь, если от моего главного класса делают

Data thisData;
thisData.initData();
myData.add(thisData);
thisData.changeData();
myData.add(thisData);
// ... repeat and repeat and repeat

Вопрос: как статический префикс изменяет поведение кода? Я имею в виду: myData будет населен всегда тем же самым объектом, потому что его области x и y были объявлены статичными? Или будет myData быть населенным всегда новыми объектами? Другими словами: как делает добавление (), заявление добавляет объект? дублирование его?

спасибо.

1

5 ответы

Это не дублирует его. Это просто добавляет ссылку объекта к списку.

Когда вы пишете

Data thisData = ...

thisData is a reference to the Data object you've created. Using that reference will always point to the instantiated object unless you explicity copy this object (via a copy constructor, a clone() method etc.)

Так неоднократно добавляющий thisData к списку просто означает, что у вас есть многочисленные списки, ссылающиеся на тот же самый объект (или список умножают ссылку на тот же самый объект). Вы будете видеть это, если вы измените члена thisData . Каждый список отразит это изменение.

Обратите внимание, что это относится к объектам. Для примитивов ( интервал , долго и т.д.) копируются ценности. Для неизменных объектов (объекты, которые не могут быть изменены) это не имеет значения, конечно.

3
добавлено
Это означает, что arraylist на самом деле не работает? Это будет содержать многократные ссылки того же самого статического объекта?
добавлено автор Beppi's, источник
Вы говорите, что примитивы копируются. Isn' t это случай моих областей x и y?
добавлено автор Beppi's, источник

Now your List is shared among instances of your object , with the static

Любой запрос случая .add (thisData) ; добавят Данные к вашему Списку

1
добавлено

Все случаи вашего массива данных разделят те же самые области x и y. Любая попытка изменить размножится ко всем недавно созданным случаям. Почему иметь многократные случаи во множестве, тогда?

1
добавлено
действительно, that' s, почему я спросил:) спасибо
добавлено автор Beppi's, источник

static means that if any instance of your class access myData or if you access it as .myData, you would be talking to the same ArrayList, i.e it is shared among all instances of your class.

Это не имеет никакого отношения к тому, что добавляется к нему.

Править: Статический x, y полностью ускользнул от меня. В этом случае все случаи , Данные разделят эти две переменные, т.е. их стоимость, будут идентичны.

Это не означает, что они - тот же самый случай просто, потому что == операция возвратится ложный. Также любые другие переменные Данные будут уникальны для каждого случая, как обычно.

1
добавлено
Да, это о myData быть статичным, но вопрос было о поведении статических областей, x и y.
добавлено автор Beppi's, источник
@BeppiMenozzi Ах, который полностью избежал меня, я отредактировал свой ответ.
добавлено автор Karthik T, источник

Это поместит объект, на который ссылаетесь вы статические переменные в списке. Таким образом, если вы не измените вас статические переменные, то это будет всегда помещать те же самые объекты, если вы создадите новый объект, на который ссылаются статические переменные, то это добавит новый. Но будьте осторожны, если вы изменяете некоторые области объекта с некоторыми сеттерами, которые проявят на объекте, уже добавленном в списке.

1
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async