← Назад к вопросам

Можно ли создать массив через new?

1.6 Junior🔥 101 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Да, можно создать массив через new

В Java массивы создаются ИСКЛЮЧИТЕЛЬНО через оператор new. Это отличает массивы от других типов, которые можно инициализировать литералами.

Синтаксис создания массива через new

// Способ 1: указание размера
int[] arr1 = new int[10];        // массив из 10 элементов
String[] arr2 = new String[5];   // массив из 5 строк
Object[] arr3 = new Object[3];   // массив из 3 объектов

// Способ 2: инициализация при создании
int[] arr4 = new int[]{1, 2, 3, 4, 5};
String[] arr5 = new String[]{"Java", "Python", "C++"};

// Способ 3: сокращённый синтаксис (только при объявлении)
int[] arr6 = {10, 20, 30};  // Эквивалент new int[]{10, 20, 30}

Примитивные типы

// Числовые типы
byte[] bytes = new byte[10];           // новый массив байтов
short[] shorts = new short[5];         // новый массив коротких целых
int[] ints = new int[100];             // новый массив целых
long[] longs = new long[50];           // новый массив длинных целых
float[] floats = new float[20];        // новый массив чисел с плавающей точкой
double[] doubles = new double[30];     // новый массив двойной точности

// Булевы и символы
boolean[] bools = new boolean[10];     // новый массив логических значений
char[] chars = new char[256];          // новый массив символов

Объектные типы

// Строки
String[] strings = new String[10];

// Пользовательские классы
class Person {
    String name;
    int age;
}

Person[] people = new Person[5];

// Встроенные классы
Integer[] integers = new Integer[10];  // автоупаковка
Double[] doubles = new Double[5];
Boolean[] booleans = new Boolean[3];

Многомерные массивы

// Двумерный массив
int[][] matrix = new int[3][4];  // 3 строки, 4 столбца

// Трёхмерный массив
int[][][] cube = new int[2][3][4];

// Неправильные массивы (разные размеры строк)
int[][] jagged = new int[3][];    // 3 строки
jagged[0] = new int[5];            // первая строка из 5 элементов
jagged[1] = new int[3];            // вторая строка из 3 элементов
jagged[2] = new int[7];            // третья строка из 7 элементов

Инициализация с начальными значениями

// Вариант 1: новый массив
int[] arr1 = new int[]{1, 2, 3, 4, 5};

// Вариант 2: сокращённо (только при объявлении)
int[] arr2 = {1, 2, 3, 4, 5};

// Вариант 3: двумерный с инициализацией
int[][] matrix = new int[][]{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// Вариант 4: со сложными объектами
String[] names = new String[]{
    "Иван",
    "Мария",
    "Петр"
};

Значения по умолчанию

// При создании массива все элементы инициализируются значениями по умолчанию
int[] ints = new int[5];          // {0, 0, 0, 0, 0}
boolean[] bools = new boolean[3]; // {false, false, false}
String[] strs = new String[4];    // {null, null, null, null}

class Box {
    int value;
}

Box[] boxes = new Box[2];         // {null, null} — НЕ new Box()!

Практический пример

public class ArrayExample {
    public static void main(String[] args) {
        // Создание массива целых чисел
        int[] numbers = new int[5];
        System.out.println("Длина: " + numbers.length);  // 5
        System.out.println("Первый элемент: " + numbers[0]);  // 0
        
        // Заполнение элементов
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = i * 10;
        }
        
        // Инициализация при создании
        String[] fruits = new String[]{"Apple", "Banana", "Orange"};
        
        // Двумерный массив
        int[][] grid = new int[3][3];
        grid[0][0] = 1;
        grid[1][1] = 5;
        grid[2][2] = 9;
        
        // Вывод
        System.out.println("Фрукты: " + java.util.Arrays.toString(fruits));
        System.out.println("Сетка: " + java.util.Arrays.deepToString(grid));
    }
}

Операции с массивами

import java.util.Arrays;

public class ArrayOperations {
    public static void main(String[] args) {
        int[] arr = new int[]{3, 1, 4, 1, 5, 9};
        
        // Сортировка
        Arrays.sort(arr);
        System.out.println("Отсортирован: " + Arrays.toString(arr));
        
        // Поиск
        int index = Arrays.binarySearch(arr, 4);
        System.out.println("Индекс 4: " + index);
        
        // Копирование
        int[] copy = Arrays.copyOf(arr, arr.length);
        int[] partial = Arrays.copyOfRange(arr, 1, 4);
        
        // Заполнение
        int[] filled = new int[5];
        Arrays.fill(filled, 42);
        System.out.println("Заполнен: " + Arrays.toString(filled));
        
        // Сравнение
        System.out.println("Равны? " + Arrays.equals(arr, copy));
    }
}

Преобразование в List и обратно

import java.util.*;

public class ArrayToList {
    public static void main(String[] args) {
        // Массив → List (неизменяемый вид)
        Integer[] arr = {1, 2, 3, 4, 5};
        List<Integer> list1 = Arrays.asList(arr);
        
        // Массив → изменяемый List
        List<Integer> list2 = new ArrayList<>(Arrays.asList(arr));
        list2.add(6);  // ✅ работает
        
        // List → массив
        Integer[] arr2 = list2.toArray(new Integer[0]);
        
        // Stream → массив
        int[] arr3 = list2.stream().mapToInt(Integer::intValue).toArray();
    }
}

Варианты синтаксиса

// ✅ ПРАВИЛЬНО
int[] arr1 = new int[5];                    // размер 5
int[] arr2 = new int[]{1, 2, 3};           // инициализация
int[] arr3 = {1, 2, 3};                    // краткая форма
int[] arr4 = new int[arr1.length];         // размер как переменная

// ❌ НЕПРАВИЛЬНО
int[] arr5 = {1, 2, 3};  // без new только при объявлении!
int[5] arr6;             // синтаксис неверный!
int arr7 = new int[5];   // arr7 это int, не массив!

Ограничения массивов в Java

// Массивы фиксированного размера
int[] arr = new int[10];
arr = new int[20];  // новый массив
arr[10] = 5;        // ❌ ArrayIndexOutOfBoundsException

// Нельзя расширить без создания нового
int[] expanded = new int[arr.length * 2];
System.arraycopy(arr, 0, expanded, 0, arr.length);
arr = expanded;

Альтернатива: использование Collections

// Вместо массивов часто удобнее List
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(1);
list.set(0, 10);
System.out.println(list);  // [10, 2, 3]

// Или используй Arrays.asList() для быстрого создания
List<String> names = Arrays.asList("A", "B", "C");

Заключение

Массивы в Java:

  • Создаются ТОЛЬКО через new
  • Имеют фиксированный размер
  • Инициализируются значениями по умолчанию
  • Могут быть примитивными или объектными
  • Могут быть многомерными
  • Часто заменяются на List для большей гибкости
Можно ли создать массив через new? | PrepBro