ลิเทอรัล 127 หมายถึงค่าชนิด int ลิเทอรัล 1 ก็เช่นกันผลรวมของทั้งสองนี้คือจำนวนเต็ม 128 ปัญหาในกรณีที่สองคือคุณกำหนดค่านี้ให้กับตัวแปรชนิดไบต์ ไม่มีอะไรเกี่ยวข้องกับค่าจริงของนิพจน์ มันเกี่ยวข้องกับ Java ที่ไม่สนับสนุนการบังคับ (*) คุณต้องเพิ่มตัวพิมพ์
byte b = (byte)(127 + 1);
จากนั้นจะรวบรวม
(*) อย่างน้อยก็ไม่ใช่ประเภท String-to-integer, float-to-Time, ... Java สนับสนุนการบีบบังคับถ้าเป็นในแง่หนึ่งคือไม่สูญเสีย (Java เรียกสิ่งนี้ว่า "widening")
และไม่คำว่า "บีบบังคับ" ไม่จำเป็นต้องแก้ไข มันถูกเลือกอย่างตั้งใจและถูกต้องในตอนนั้น จากแหล่งข้อมูลที่ใกล้เคียงที่สุด (Wikipedia): "ในภาษาส่วนใหญ่คำว่า coercion ใช้เพื่อแสดงถึงการแปลงโดยนัยไม่ว่าจะในระหว่างการรวบรวมหรือในระหว่างรันไทม์" และ "ในวิทยาการคอมพิวเตอร์การแปลงประเภทการพิมพ์และการบีบบังคับคือวิธีการที่แตกต่างกันทั้งโดยปริยายหรือโดยชัดแจ้งในการเปลี่ยนเอนทิตีของข้อมูลประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง"
byte
ประเภทข้อมูลถึงเจ็บปวดขนาดนี้!