Одномерные массивы в Java
Что такое массив (array)? Это структура данных, существующая практически в каждом языке программирования, которая позволяет хранить группу однотипных значений под общим именем. В этом уроке разберём одномерные массивы в Java: как их объявлять, инициализировать, узнавать длину и перебирать элементы.
1. Что такое массив?
Представим, что у вас есть приют для бездомных животных, в котором пять котов. Как зовут каждого, вы не помните, но у каждого есть жетончик с номерком, который позволяет идентифицировать животное. Можно сказать, что это и есть массив «котики» размером пять. Обратите внимание: индексация начинается с нуля — так принято в Java. Если бы не было возможности создавать массивы, пришлось бы объявлять пять переменных и придумывать им имена, что не очень удобно.

В Java можно создавать массивы любой размерности — одномерные, двумерные, трехмерные и так далее. Начнем с одномерного массива.
2. Объявление массива
Одномерный массив в Java — это список переменных одного типа. Чтобы создать массив, нужно сначала объявить переменную массива требуемого типа.
Общая форма объявления одномерного массива выглядит следующим образом:
тип[] имяПеременной; Параметр тип обозначает тип элемента массива, называемый также базовым типом. Это может быть как примитивный тип (int, double, boolean и т. д.), так и ссылочный (например, String).
Квадратные скобки можно ставить как после типа, так и после имени переменной. Более правильным вариантом считается указание скобок после типа — так тип и скобки находятся в одном месте, и с первого взгляда понятно, что перед вами массив такого-то типа:
int monthDays[]; // допустимо, но не рекомендуется
double[] monthSalaries; // рекомендуемый стиль 3. Инициализация массива с помощью new
Когда массив объявлен, память под него еще не выделена. Для выделения памяти используется ключевое слово new, после которого указывается тип массива и в квадратных скобках его размер:
имяПеременной = new тип[размер]; Массив может быть объявлен и инициализирован одной строкой:
int[] values = new int[45]; Рассмотрим пример создания массива типа int размером 12. После выполнения строки int[] monthDays = new int[12] массив из 12 элементов создан. Каждому элементу присваивается значение по умолчанию для заданного типа:
| Базовый тип массива | Значение по умолчанию |
|---|---|
byte, short, int, long | 0 |
float, double | 0.0 |
char | '\u0000' (нулевой символ) |
boolean | false |
Ссылочные типы (String и др.) | null |
Для обращения к отдельному элементу массива после имени массива в квадратных скобках задаём индекс элемента. Так мы можем изменить или получить его значение:
public class ArrayExample1 {
public static void main(String[] args) {
int[] monthDays = new int[12];
monthDays[0] = 31;
monthDays[1] = 28;
monthDays[2] = 31;
monthDays[3] = 30;
monthDays[4] = 31;
monthDays[5] = 30;
monthDays[6] = 31;
monthDays[7] = 31;
monthDays[8] = 30;
monthDays[9] = 31;
monthDays[10] = 30;
monthDays[11] = 31;
System.out.println("В апреле " + monthDays[3] + " дней.");
}
} Программа выведет: В апреле 30 дней.
4. Блок инициализации массива
Если значения элементов известны заранее, можно использовать блок инициализации массива. Вместо new int[12] в фигурных скобках через запятую перечисляются значения элементов. Размер массива компилятор выводит из количества указанных элементов:
public class ArrayExample2 {
public static void main(String[] args) {
int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
System.out.println("В апреле " + monthDays[3] + " дней.");
}
} 5. Безымянный (анонимный) массив
Существует и третья форма создания массива — безымянный массив, его также называют анонимным. Он используется в двух случаях.
Первый — вы объявили и инициализировали массив testScores размера четыре, но потом по какой-то причине он должен быть заменён массивом из трёх элементов. Использовать повторно блок инициализации нельзя — будет ошибка компиляции:
int[] testScores = {1, 2, 3, 4};
...
testScores = {4, 7, 2}; // ошибка компиляции Но можно использовать безымянный массив, который создаст новый массив в памяти. Форма записи безымянного массива — это комбинация первых двух:
testScores = new int[]{4, 7, 2}; Второй случай — передача массива в метод. В следующем примере метод print принимает на вход массив типа int. При вызове метода в качестве аргумента можно передать безымянный массив:
public class ArrayExample3 {
public static void main(String[] args) {
int[] testScores = {1, 2, 3, 4};
for (int element : testScores) {
System.out.print(element + " ");
}
System.out.println();
testScores = new int[]{4, 7, 2};
for (int element : testScores) {
System.out.print(element + " ");
}
System.out.println();
print(new int[]{4, 6, 2, 3});
}
public static void print(int[] array) {
for (int element : array) {
System.out.print(element + " ");
}
}
} 6. Длина массива и перебор элементов
Узнать длину массива (количество его элементов) можно с помощью поля length:
int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
System.out.println(monthDays.length); // 12 Важно
У массива length — это поле, а не метод: пишется без скобок. Не путайте с length() у String и size() у коллекций — на этой мелочи часто спотыкаются на собеседованиях.
Поле length удобно использовать для перебора элементов в цикле for. Так как индексация начинается с нуля, индекс последнего элемента равен length - 1:
int[] scores = {90, 75, 82, 68};
for (int i = 0; i < scores.length; i++) {
System.out.println("Элемент с индексом " + i + ": " + scores[i]);
} Если индекс не нужен, элементы перебирают циклом for-each — он короче и защищает от выхода за границы массива:
for (int score : scores) {
System.out.println(score);
} При обращении по несуществующему индексу (например, scores[4] для массива из четырёх элементов) компилятор ошибку не покажет, но во время выполнения программа завершится с исключением ArrayIndexOutOfBoundsException.
Важно
Размер массива в Java задаётся при создании и не может быть изменён. Если количество элементов заранее неизвестно или должно меняться, используйте коллекции, например ArrayList.
Подробный разбор длины массива — для одномерных и многомерных массивов, с дополнительными примерами — смотрите в отдельном уроке «Длина массива в Java».
Часто задаваемые вопросы
Можно ли изменить размер массива после создания?
Нет, размер массива фиксируется в момент создания. Чтобы «расширить» массив, создают новый массив большего размера и копируют в него элементы (например, методом Arrays.copyOf). Если размер должен меняться часто, удобнее использовать ArrayList.
Как вывести одномерный массив на экран?
Проще всего вызвать System.out.println(Arrays.toString(array)) — метод вернёт строку вида [1, 2, 3]. Если печатать массив напрямую через println(array), вы увидите не элементы, а нечто вроде [I@1b6d3586 — тип и хеш-код объекта. Также можно перебрать элементы циклом for или for-each.
Как перевернуть массив в Java?
Классический способ — цикл до середины массива с обменом элементов: первый меняется местами с последним, второй — с предпоследним и так далее. Для списков есть готовый метод Collections.reverse(list), а массив можно обернуть через Arrays.asList (для ссылочных типов).
Video Explanation
Prefer video format? Watch this lesson with examples and explanations.
Comments