В Java, почему нечто вызова () не ambigious, учитывая 2 varags нечто методов (интервал … ints) и нечто (Возражают объектам …)?

Из перегружаемых операторов могут быть перегружены следующие операторы:

  • Унарные: +, -, !, ~, ++, --, true, false
  • Двоичные: +, -, *, /, %, &, |, ^, <<, >>
  • Сравнение: ==, !=, <, >, <=, >=

И эти операторы не могут быть перегружены:

  • Логический: &&, ||
  • Индексирование массива: []
  • В ролях: (T)x
  • Назначение: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
  • Другие: =, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof

Кроме того, операторы сравнения должны быть перегружены попарно Если вы перегружаете одну, вы должны перегрузить другую:

  • == и !=
  • < и >
  • <= и >=

10
задан mikej 4 June 2009 в 16:41
поделиться

2 ответа

Если я правильно помню, когда я готовил scjp, в первом случае у вас есть 2 аргумента без связи между ними, поэтому компилятор не может выбрать один.

во-вторых, при включенном боксе (1.5+) int может быть Integer, который является подмножеством Object, и компилятор в случае конфликта всегда будет использовать наиболее конкретное определение. Таким образом, приоритет отдается Integer (int).

29
ответ дан 3 December 2019 в 14:35
поделиться

Java всегда будет использовать ближайший возможный тип, поэтому, когда вы передаете int в метод, если у вас нет int .. .., он автоматически упаковывает их в целые числа и использует Object .... Поскольку существует метод int ..., Java будет использовать его в первую очередь. Это выбор в дизайне компилятора Java.

4
ответ дан 3 December 2019 в 14:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: