Dlaczego tak
Typ int jest stałoprzecinkowy 32-bitowy z zakresem do 2 147 483 647; dodanie 1 do wartości maksymalnej przepełnia go i wynik zawija się do najmniejszej wartości −2 147 483 648, bez zgłaszania wyjątku. Typ double jest zmiennoprzecinkowy i ma znacznie większy zakres, więc po dodaniu 1 przechowuje 2147483648, a Java wypisuje go w notacji naukowej 2.147483648E9. Odpowiedź z wartością dodatnią dla int pomija przepełnienie.