Массивы

Вопрос 1

Что будет, если попытаться откомпилировать и запустить следующий код:

Object[] ints = new Object[]{1};

if (ints[0] == 1) {

System.out.println("Possible");

}

а. Код не откомпилируется
б. Код откомпилируется, но программа выбросит исключение во время выполнения
в. Код откомпилируется и программа отработает без ошибок, выведя в консоль слово Possible

а. Код не откомпилируется

Несмотря на то, что мы знаем, что в массиве по факту лежит Integer, компилятор при поиске ошибок учитывает только типы данных. В нашем случае objs объявлен как массив Object'ов, а значит с точки зрения компилятора в if'е происходит попытка сравнить Object и int.

Поскольку сравнение объектных типов с примитивами с помощью == запрещено (за исключением типов-обёрток над примитивами), то будет получена ошибка компиляции.

Вопрос 2

Что будет, если попытаться откомпилировать и запустить следующий код:

int[] numbers = new int[3];

numbers = {1,2,3};


System.out.println(numbers[1]);

а. Код не откомпилируется.
б. Код откомпилируется, но программа выбросит исключение во время выполнения.
в. Код откомпилируется и программа отработает без ошибок, выведя в консоль 1.
г. в. Код откомпилируется и программа отработает без ошибок, выведя в консоль 2.

а. Код не откомпилируется.

Так называемая анонимная инициализация массива возможна только в том случае, если она происходит в одной инструкции с объявлением массива. В нашем примере это бы выглядело так:

int[] numbers = {1,2,3};

Такая инициализация не может быть разбита на две инструкции (как у нас), поэтому код даже не откомпилируется.