Мне уже определили массив Java, например.
float[] values = new float[3];
Я хотел бы сделать что-то вроде этого далее на в коде:
values = {0.1f, 0.2f, 0.3f};
Но это дает мне ошибку компиляции. Существует ли более хороший способ определить несколько значений сразу, вместо того, чтобы делать это?:
values[0] = 0.1f;
values[1] = 0.2f;
values[2] = 0.3f;
Спасибо!
Да:
float[] values = {0.1f, 0.2f, 0.3f};
Этот синтаксис разрешен только в инициализаторе. Вы не можете использовать его в задании, где лучшее, что вы можете сделать:
values = new float[3];
или
values = new float[] {0.1f, 0.2f, 0.3f};
Пытаться найти ссылку в спецификации языка для этого, но это как никогда нечитабельно. Кто-нибудь еще нашел его?
В объявлении вы можете сделать следующее.
float[] values = {0.1f, 0.2f, 0.3f};
Когда поле уже определено, попробуйте это.
values = new float[] {0.1f, 0.2f, 0.3f};
Имейте в виду, что вторая версия также создает новый массив.
Если values
были единственной ссылкой на уже существующее поле, оно становится пригодным для сборки мусора.
Если вы знаете значения во время компиляции, вы можете сделать:
float[] values = {0.1f, 0.2f, 0.3f};
Невозможно сделать это, если значения являются переменными во время выполнения.
Это должно работать, но работает медленнее и кажется неправильным: System.arraycopy (new float [] {...}, 0, values, 0, 3);
Java не поддерживает предоставить конструкцию, которая назначит нескольких значений существующим элементам массива. Синтаксис инициализатора можно использовать ТОЛЬКО при создании нового объекта массива. Это может быть в момент объявления или позже. Но в любом случае инициализатор инициализирует новый объект массива, а не обновляет существующий.