Что будет напечатано следующим кодом?

public class Main {
    public static void var(Integer x, int y) {
        System.out.println("Integer int");
    }

    public static void var(Object... x) {
        System.out.println("Object");
    }

    public static void var(int... x) {
        System.out.println("int... x");
    }

    public static void var(Integer... x) {
        System.out.println("Integer...");
    }

    public static void main(String... args) { 
        int i = 0;
        Integer i2 = 127;
        var(i, i2);
    }
}
Explanation
При вызове перегруженных (overloaded) методов компилятор:
1) сначала ищет метод, типы параметров которого в точности совпадают с аргументами;
если такого метода не нашлось, то
2) затем ищет метод с параметрами, которые могут быть получены с помощью допустимых при вызове преобразований (widening, boxing+widening, unboxing+widening);
если и такого метода не нашлось, то
3) затем анализируются методы с переменным количеством аргументов.

В данном примере компилятор останавливается на втором шаге (срабатывают преобразования int→Integer, Integer→int).

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты