Şimdiye kadar verilen cevaplara ek olarak ...
Toplamda dört değer var
int i = Integer.MIN_VALUE;
long i = Long.MIN_VALUE;
Integer i = Integer.valueOf(Integer.MIN_VALUE);
Long i = Long.valueOf(Long.MIN_VALUE);
Sarılmış değerler sarmalanmaz, dolayısıyla bu ifade için de geçerlidir.
Not: Math.abs belgeleri.
public static int abs (int a)
Bir int değerinin mutlak değerini döndürür. Argüman negatif değilse, argüman döndürülür. Bağımsız değişken negatifse, bağımsız değişkenin olumsuzluğu döndürülür.
Bağımsız değişken, gösterilebilir en negatif int değeri olan Tamsayı.MIN_VALUE değerine eşitse, sonuç negatif olan aynı değerdir.
ve
public statik uzun abs (uzun a)
Uzun bir değerin mutlak değerini döndürür. Argüman negatif değilse, argüman döndürülür. Bağımsız değişken negatifse, bağımsız değişkenin olumsuzluğu döndürülür.
Bağımsız değişken, gösterilebilir en negatif uzun değer olan Long.MIN_VALUE değerine eşitse, sonuç negatif olan aynı değerdir.
Math.abs'ın negatif bir sayı döndürmesi şaşırtıcıdır. Bunun nedeni, a) bu durumlarda -MIN_VALUE için pozitif değerler olmaması, b) -hesaplama sonuçlarının bir taşma ile gerçekleştirilmesi.
Ayrıca ilginç olan, Byte.MIN_VALUE, Short.MIN_VALUE'nun neden bunu yapmadığıdır. Bunun nedeni, -tipin intbunlar için değiştirilmesidir ve dolayısıyla taşma olmamasıdır.
Karakter.MIN_VALUE, 0 olduğu için problem yaşamıyor.
Float.MIN_VALUE ve Double.MIN_VALUE farklı bir anlama sahiptir. Bunlar, sıfırdan büyük temsil edilebilen en küçük değerdir. Böylece kendileri olmayan geçerli negatif değerlere sahiptirler.