Как упоминалось в этом ответе , при выборе того, какой перегруженный метод следует использовать, следуют правила.
Цитировать:
blockquote>
- Примитивное расширение использует наименьший аргумент метода
- Тип обложки не может быть расширен до другого типа Wrapper
- Вы можете вставить из int в Integer и расширить до Object, но не до Long
- Расширение бьет Бокс, Бокс побеждает Вар-арг.
- Вы можете вставить и затем Widen (Int может стать объектом через Integer)
- Вы не можете Widen, а затем Box (
- Вы не можете комбинировать var-args с расширением расширения и .
(Давайте переопределим правило 1 следующим образом: «Примитивное расширение использует максимально возможный аргумент метода .»)
Таким образом, имея в виду эти правила, мы можем получить идея о том, что здесь происходит:
Согласно правилу номер один, примитивное расширение использует максимально возможный аргумент метода , Поскольку
int
представляет нечетное число (например,1
), аdouble
представляется десятичным числом с точностью более 32 байт, чем числоfloat
(например,1.0
), мы можем сказать, чтоint
s «меньше» или «меньше»double
s, и по этой логикеint
s может быть «продвинуто» доdouble
s, аdouble
s может быть " demoted "наint
s.Проще говоря, примитив, который может быть расширен до другого примитива (например,
int
->float
->double
), является более конкретным , чем другой. Например,int
является более конкретным , чемdouble
, потому что1
может быть повышен до1.0
.Если вы не передали аргументы этим перегруженным vararg методы с тем же именем, так как возврат фактически тот же (0 и 0.0 соответственно), компилятор решил использовать метод, который принимает vararg типа
int
, поскольку он более конкретный .Итак, когда вы ввели те же методы, что и в
int
s иboolean
s (типы, которые не могут быть расширены друг к другу) соответственно, компилятор теперь не может выбрать метод для использования, посколькуint
s не может «продвигаться» или «понижаться в должности» подобноint
s,float
s иdouble
s. Таким образом, это вызовет ошибку компиляции.Надеюсь, это поможет вам понять, что происходит.