В Java, если "char c = 'a'", почему "c = c + 1" не компилируется? - PullRequest
0 голосов
/ 12 ноября 2018

Я попытался скомпилировать следующий код:

public static void main(String[] args){
    for (char c = 'a'; c <='z'; c = c + 1) {
        System.out.println(c);
    }
}

Когда я пытаюсь скомпилировать, он выдает:

Ошибка: (5, 41) Java: несовместимые типы: возможное преобразование с потерями int to char

Дело в том, что это работает, если я пишу c = (char)(c + 1), c += 1 или c++.

Я проверил, и компилятор выдает похожую ошибку при попытке char c = Character.MAX_VALUE + 1;, но я не вижу способа, чтобы значение 'c' могло передать максимум типа 'char' в исходной функции.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Сначала вы объявляете c как char, а не используете его как int

0 голосов
/ 12 ноября 2018

c + 1 - это int, так как операнды подвергаются двоичному числовому продвижению :

  • c является char
  • 1 является int

поэтому c необходимо расширить до int, чтобы сделать его совместимым для добавления; и результат выражения имеет тип int.

Что касается того, что «работает»:

  • c = (char)(c + 1) явно приводит выражение к char, поэтому его значение совместимо с типом переменной;
  • c += 1 эквивалентно c = (char) ((c) + (1)), поэтому оно в основном совпадает с предыдущим.
  • c++ относится к типу char, поэтому приведение не требуется.
...