Массивы
Вопрос 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};
Такая инициализация не может быть разбита на две инструкции (как у нас), поэтому код даже не откомпилируется.