Что выведет код Middle Основы: типы, обёртки, static обновлено
Что выведет: перегрузка, расширение и упаковка
Вопрос
Что выведет программа (Java 21)? Каждый вывод println с новой строки.
public class Main {
static void f(long x) { System.out.println("long"); }
static void f(Integer x) { System.out.println("Integer"); }
static void f(int... x) { System.out.println("varargs"); }
static void g(Object x) { System.out.println("Object"); }
static void g(int... x) { System.out.println("varargs"); }
public static void main(String[] args) {
f(5);
g(5);
f();
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: long, Object, varargs. Перегрузка выбирается в три фазы: сначала без упаковки и varargs (расширение int в long подходит, поэтому long), потом с упаковкой, и только потом varargs.
Что выведет
long
Object
varargs
Разбор
Перегрузка выбирается в три фазы: сначала без упаковки и varargs (расширение int в long подходит, поэтому long), потом с упаковкой, и только потом varargs. Для g(5) первой фазе ничего не подходит, во второй int упаковывается в Integer, а это Object. Варианты с varargs проигрывают обоим. Вызов f() без аргументов подходит только к varargs.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Основы: типы, обёртки, static»
- char плюс int
- Изменили константу в библиотеке
- Деньги в double
- Ключ Long и get(int)
- final ссылка на список
- Автоупаковка
- Порядок инициализации
- Примитивы Java