Прежде всего, обратите внимание, что char
имеет размер 2 байта (16 бит), а int
- 32 бита.
1.При наборе ch++
:
для применения оператора ++
приведение типов отсутствует, но оператор просто заставляет представление бита этого char
увеличиваться на 1 для себя.См. JLS11, глава 15.14.2, стр. 575:
Тип выражения приращения постфикса - это тип переменной.
2.При наборе ch=ch+1
:
ch
сначала приводится к int
, затем добавляется 1
(все еще целое число), и =
фактически приводит к приведениюint
, который имеет 32 бита в char
, который имеет только 16
бит, обратите внимание, что это может потерять точность .Поэтому без явного приведения компилятор будет жаловаться на это, что является причиной ошибки.