Вы правильно сделали, указав, что приведение требуется, но, к сожалению, вы не применили его к правильному выражению из-за приоритета операторов.
Рассмотрим следующий фрагмент:
static void f(char ch) {
System.out.println("f(char)");
}
static void f(int i) {
System.out.println("f(int)");
}
public static void main(String[] args) {
char ch = 'X';
f( (char) ch + 1 ); // prints "f(int)"
f( (char) (ch + 1) ); // prints "f(char)"
}
Приведение имеет более высокий приоритет, чем дополнение, поэтому фрагмент напечатает, что он делает. То есть первый вызов эквивалентен f( ((char) ch) + 1 );
. Результатом добавления является int
, поэтому вызывается перегрузка f(int)
.
Урок здесь заключается в том, что вы должны всегда использовать круглые скобки , если вы не делаете очень простое приведение. В общем, всегда рассматривайте возможность использования скобок, чтобы сделать порядок вычисления явным, даже если в этом нет необходимости. Они приводят к лучшему, более читаемому коду.