Подтвердить что ты не робот

Почему f (Double x) лучше, чем f (double... x)?

Сегодня я учился на вступительный экзамен Java, и я столкнулся с этим вопросом:

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

class A {
    public void f(Double x) { System.out.println("A.f(Double)"); }
    public void f(double... x) { System.out.println("A.f(double...)"); }
}

Каков результат, полученный командой A a = new A(); a.f(1.0);?

Ответ кажется A.f(Double), но я не могу понять, почему. Может ли кто-нибудь дать мне правильное объяснение?

4b9b3361

Ответ 1

Разрешение перегрузки всегда благоприятствует функции с явным количеством аргументов над функцией с переменным списком аргументов, даже если это означает, что 1.0 автоматически помещается в поле.

В немного более подробной форме функция выбирается с таким приоритетом в соответствии с JLS 15.12.2:

  • Расширение типа
  • Auto-бокс
  • Переменные аргументы