Причина в том, что математические операции выполняют неявное приведение:
a += 5.0;
оценивается следующим образом:
a = (int) ((double) a + 5.0);
Назначение, однако, требует явного приведения.
(Это может быть float, а не double, я не помню, какой Java обрабатывает как десятичные литералы.)