Zunächst wird die Summe der Funktionsparameter sum1 und sum2 gebildet und in einer Variablen vom Typ long gespeichert. Die Summe von int-Werten kann den Wertebereich eines long nicht überschreiten, daher kann es hier noch nicht zu einem Überlauf kommen. Anschließend wird mit einer if-Abfrage kontrolliert, ob das Ergebnis noch im Wertebereich eines int liegt. Die dazu nötigen Bereichsgrenzen bekommt man von der Wrapper-Klasse Integer. Liegt der Wert außerhalb, wird eine Warnmeldung ausgegeben und der Wert 0 zurückgegeben. Ansonsten wird die berechnete Summe zurückgegeben.
Das Problem ist: Die Summe der Funktionsparameter suml und sum2 wird in einer Variablen des Typs long gespeichert, der Rückgabetyp der Funktion ist int. Wenn nun die long-Variable mithilfe von return zurückgegeben würde, so müsste eine Typumwandlung von long auf int (also von einem größeren Typ auf einen kleineren) stattfinden. Dabei kann es aber (zumindest theoretisch) zu einem Verlust von Daten kommen, sodass der Compiler diese Umwandlung nicht implizit vornimmt und stattdessen abbricht.