เพิ่มเติมจากคำตอบที่ให้มา ...
มีทั้งหมดสี่ค่า
int i = Integer.MIN_VALUE;
long i = Long.MIN_VALUE;
Integer i = Integer.valueOf(Integer.MIN_VALUE);
Long i = Long.valueOf(Long.MIN_VALUE);
ค่าที่รวมจะถูกคลายออกดังนั้นจึงเป็นจริงสำหรับนิพจน์นี้ด้วย
หมายเหตุ: เอกสาร Math.abs
สาธารณะคง int abs (int a)
ส่งคืนค่าสัมบูรณ์ของค่า int ถ้าอาร์กิวเมนต์ไม่เป็นลบอาร์กิวเมนต์จะถูกส่งกลับ ถ้าอาร์กิวเมนต์เป็นลบการปฏิเสธของอาร์กิวเมนต์จะถูกส่งกลับ
โปรดสังเกตว่าถ้าอาร์กิวเมนต์เท่ากับค่า Integer.MIN_VALUE ซึ่งเป็นค่า int ที่เป็นค่าลบมากที่สุดผลลัพธ์จะเป็นค่าเดียวกันซึ่งเป็นค่าลบ
และ
abs ยาวแบบคงที่สาธารณะ (ยาว a)
ส่งคืนค่าสัมบูรณ์ของค่ายาว ถ้าอาร์กิวเมนต์ไม่เป็นลบอาร์กิวเมนต์จะถูกส่งกลับ ถ้าอาร์กิวเมนต์เป็นลบการปฏิเสธของอาร์กิวเมนต์จะถูกส่งกลับ
โปรดสังเกตว่าถ้าอาร์กิวเมนต์เท่ากับค่า Long.MIN_VALUE ซึ่งเป็นค่ายาวที่เป็นค่าลบมากที่สุดผลลัพธ์จะเป็นค่าเดียวกันซึ่งเป็นค่าลบ
เป็นที่น่าแปลกใจที่ Math.abs อาจส่งคืนจำนวนลบ สิ่งนี้เกิดขึ้นอย่างใดอย่างหนึ่งเนื่องจาก a) ไม่มีค่าบวกสำหรับ -MIN_VALUE ในกรณีเหล่านี้ b) ทำการ-คำนวณผลลัพธ์ในจำนวนมากเกินไป
สิ่งที่น่าสนใจคือทำไม Byte.MIN_VALUE, Short.MIN_VALUE ไม่ทำสิ่งนี้ เนื่องจากการ-เปลี่ยนแปลงประเภทเป็นintสำหรับสิ่งเหล่านี้จึงไม่มีการล้น
Character.MIN_VALUE ไม่มีปัญหาเพราะเป็น 0
Float.MIN_VALUE และ Double.MIN_VALUE มีความหมายที่แตกต่างกัน ค่าเหล่านี้เป็นค่าที่สามารถแสดงได้น้อยที่สุดที่มากกว่าศูนย์ ดังนั้นพวกเขาจึงมีค่าลบที่ถูกต้องซึ่งไม่ใช่ตัวเอง