В Java допускается следующее:
char c = 'A' + 1;
Здесь c будет содержать значение "B". Выше сначала оценивается выражение. Таким образом, "A" преобразуется в 65, все выражение оценивается до 66, а затем 66 преобразуется в "B", так как мы сохраняем значение в char.
Ниже приведена ошибка времени компиляции:
char c = 'A';
c = c + 1;
Каково объяснение того, как Java рассматривает выражения по-разному? Кстати, следующее прекрасно работает:
char c = 'A';
c++;