Ответ 1
От JLS §15.26.2:
Совокупное выражение выражения формы
E1 op= E2
эквивалентноE1 = (T) ((E1) op (E2))
, гдеT
- типE1
, за исключением того, чтоE1
оценивается только один раз.
Обратите внимание, что существует листинг, связанный с назначением соединения. Однако при простом добавлении нет отливки, следовательно, ошибка.
Если включить литье, ошибка будет предотвращена:
float a = 0;
a = (float) (a + Math.PI); // works
Это распространенное заблуждение, что x += y
идентично x = x + y
.