Почему 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)
, но я не могу понять, почему. Может ли кто-нибудь дать мне правильное объяснение?
Ответы
Ответ 1
Разрешение перегрузки всегда благоприятствует функции с явным количеством аргументов над функцией с переменным списком аргументов, даже если это означает, что 1.0
автоматически помещается в поле.
В немного более подробной форме функция выбирается с таким приоритетом в соответствии с JLS 15.12.2:
- Расширение типа
- Auto-бокс
- Переменные аргументы