Oltre alle risposte fornite finora ...
Ci sono quattro valori in totale
int i = Integer.MIN_VALUE;
long i = Long.MIN_VALUE;
Integer i = Integer.valueOf(Integer.MIN_VALUE);
Long i = Long.valueOf(Long.MIN_VALUE);
I valori inseriti nel wrapper vengono scartati, quindi sono validi anche per questa espressione.
Nota: documenti Math.abs.
pubblico statico int abs (int a)
Restituisce il valore assoluto di un valore int. Se l'argomento non è negativo, viene restituito l'argomento. Se l'argomento è negativo, viene restituita la negazione dell'argomento.
Si noti che se l'argomento è uguale al valore di Integer.MIN_VALUE, il valore int rappresentabile più negativo, il risultato è lo stesso valore, che è negativo.
e
pubblico statico lungo addominali (lungo a)
Restituisce il valore assoluto di un valore lungo. Se l'argomento non è negativo, viene restituito l'argomento. Se l'argomento è negativo, viene restituita la negazione dell'argomento.
Si noti che se l'argomento è uguale al valore di Long.MIN_VALUE, il valore lungo rappresentabile più negativo, il risultato è lo stesso valore, che è negativo.
È sorprendente che Math.abs possa restituire un numero negativo. Ciò accade perché a) non ci sono valori positivi per -MIN_VALUE in questi casi b) eseguendo il- calcolo risulta in un overflow.
Ciò che è interessante è anche perché Byte.MIN_VALUE, Short.MIN_VALUE non lo fanno. Questo perché -il tipo cambia inint per questi e quindi nessun overflow.
Character.MIN_VALUE non ha problemi perché è 0.
Float.MIN_VALUE e Double.MIN_VALUE hanno un significato diverso. Questi sono il valore rappresentabile più piccolo maggiore di zero. Quindi hanno valori negativi validi che non sono loro stessi.