Java предлагает программисту сокращенную запись для применения операции с сохранением ответа в операнд. Это например
+=,
&=, и другие. Их правильное название – операторы сложного присваивания (compound assignment). Сокращенные версии есть для всех арифметических и
битовых операторов.
У таких сокращений есть одно неочевидное отличие от полных версий. Если прочитать спецификацию, там сказано, что
x += y – это на самом деле сокращение от
x = (XType)(x + y). То есть, кроме самой операции происходит приведение результата к типу
левого операнда.
Незнание этой особенности может привести к ошибочно успешной компиляции, и неожиданным результатам работы кода (как в примере на изображении).