Ngoài các câu trả lời được đưa ra cho đến nay ...
Tổng cộng có bốn giá trị
int i = Integer.MIN_VALUE;
long i = Long.MIN_VALUE;
Integer i = Integer.valueOf(Integer.MIN_VALUE);
Long i = Long.valueOf(Long.MIN_VALUE);
Các giá trị được bao bọc được mở ra nên chúng cũng đúng với biểu thức này.
Lưu ý: Tài liệu Math.abs.
public static int abs (int a)
Trả về giá trị tuyệt đối của một giá trị int. Nếu đối số không phủ định, đối số được trả về. Nếu đối số là phủ định, thì phủ định của đối số được trả về.
Lưu ý rằng nếu đối số bằng với giá trị của Integer.MIN_VALUE, giá trị int có thể biểu diễn âm nhất, thì kết quả là cùng giá trị đó, giá trị này là số âm.
và
công tĩnh dài abs (dài a)
Trả về giá trị tuyệt đối của một giá trị dài. Nếu đối số không phủ định, đối số được trả về. Nếu đối số là phủ định, thì phủ định của đối số được trả về.
Lưu ý rằng nếu đối số bằng giá trị của Long.MIN_VALUE, giá trị dài có thể biểu diễn âm nhất, thì kết quả là cùng giá trị đó, là giá trị âm.
Điều đáng ngạc nhiên là Math.abs có thể trả về một số âm. Điều này xảy ra bởi vì a) không có giá trị dương nào cho -MIN_VALUE trong những trường hợp này b) thực hiện -phép tính dẫn đến tràn.
Điều quan tâm là tại sao Byte.MIN_VALUE, Short.MIN_VALUE không làm điều này. Điều này là do các -thay đổi kiểu intcho các và do đó không có tràn.
Character.MIN_VALUE không gặp sự cố vì nó bằng 0.
Float.MIN_VALUE và Double.MIN_VALUE có một ý nghĩa khác. Đây là giá trị nhỏ nhất có thể biểu diễn lớn hơn 0. Do đó chúng có các giá trị âm hợp lệ không phải là chính chúng.