Будут ли создаваться новые объекты?

Мне нужно заполнять массив объектами по-умолчанию. Эту операцию придётся выполнять очень часто. Для этого использую такой код:

Point[][] myArray = new Point[9][9];
    for (int i = 0; i < 9; i++){
        for (int j = 0; j < 9; j++){
            myArray[i][j] = new Point(-1; -1);
        }
    }

Я хочу узнать, будут ли при этом создаваться новые временные объекты, которые потом сборщику мусора придётся убирать, убирать и прерывать плавное выполнение программы? Может быть есть более простой и удобный способ сделать то же самое?


Ответы (2 шт):

Автор решения: afjord

Новый объекты будут создаваться, когда вызывается new. Если я правильно понял вопрос (несколько раз вызывать данные циклы на одном и том же массиве), то да, сборщик будет вызываться. Не знаю, что за задача стоит, но если так не хочется создавать новые, то чем не вариант сделать метод, который будет нужные элементы массива устанавливать в значение по умолчанию?
Т.е вместо:
myArray[i][j] = new Point(-1; -1);
Что-то вроде:
Point.setDeafualt(myArray[i][j])
Который координаты точки будет устанавливать в (-1, -1).
З.Ы. Есть метод Arrays.fill(), который заполнит массив нужными значениями.
UPD
Метод выгдядит примерно так:

setDeafualt(Point p) {
    p.setX(-1);
    p.setY(-1);
}

Т.е. один раз где-то инициализировать, а потом уже проходить этим методом.

→ Ссылка
Автор решения: Anton Shchyrov

Если объект Point константный, т.е. все его поля объявлены как final, то можно сделать так

class Point {
  public static final Point Default = new Point(-1, -1);
  ..........
}

 myArray[i][j] = Point.Default;

Тогда у вас будет объект в одном единственном экземпляре

→ Ссылка