Zusätzlich zu den bisher gegebenen Antworten ...
Insgesamt gibt es vier Werte
int i = Integer.MIN_VALUE;
long i = Long.MIN_VALUE;
Integer i = Integer.valueOf(Integer.MIN_VALUE);
Long i = Long.valueOf(Long.MIN_VALUE);
Die umschlossenen Werte werden entpackt, sodass sie auch für diesen Ausdruck gelten.
Hinweis: Math.abs-Dokumente.
public static int abs (int a)
Gibt den absoluten Wert eines int-Werts zurück. Wenn das Argument nicht negativ ist, wird das Argument zurückgegeben. Wenn das Argument negativ ist, wird die Negation des Arguments zurückgegeben.
Beachten Sie, dass wenn das Argument dem Wert von Integer.MIN_VALUE entspricht, dem negativsten darstellbaren int-Wert, das Ergebnis derselbe Wert ist, der negativ ist.
und
öffentliche statische lange abs (lange a)
Gibt den absoluten Wert eines langen Wertes zurück. Wenn das Argument nicht negativ ist, wird das Argument zurückgegeben. Wenn das Argument negativ ist, wird die Negation des Arguments zurückgegeben.
Beachten Sie, dass wenn das Argument dem Wert von Long.MIN_VALUE entspricht, dem negativsten darstellbaren Long-Wert, das Ergebnis derselbe Wert ist, der negativ ist.
Es ist überraschend, dass Math.abs möglicherweise eine negative Zahl zurückgibt. Dies geschieht entweder, weil a) in diesen Fällen keine positiven Werte für -MIN_VALUE vorliegen b) die -Berechnung zu einem Überlauf führt.
Interessant ist auch, warum Byte.MIN_VALUE, Short.MIN_VALUE dies nicht tun. Dies liegt daran -, dass der Typ intfür diese geändert wird und somit kein Überlauf erfolgt.
Character.MIN_VALUE hat kein Problem, da es 0 ist.
Float.MIN_VALUE und Double.MIN_VALUE haben eine andere Bedeutung. Dies sind die kleinsten darstellbaren Werte größer als Null. Sie haben also gültige negative Werte, die nicht sie selbst sind.