首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 基本類型算術提升規則:為什麼 byte + byte 編譯報錯

     編輯:程式設計綜合問答

現象代碼


byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; // 編譯錯誤:incompatible types: possible lossy conversion from int to byte

JLS 規範:二元數值提升

Java 語言規範 (JLS 5.6.2) 定義:任何基本類型算術運算 (`+ - * / %`),操作數會被提升至至少 `int` 類型。

  • `byte`、`short`、`char` → **提升為 `int`** 參與運算。
  • 結果類型為 `int`(或更高:`long`/`float`/`double`)。

因此 `b1 + b2` 類型是 `int`,不能隱式賦值給 `byte`(可能溢出)。

正確寫法

  1. 強制轉型:`byte b3 = (byte)(b1 + b2);`
  2. 複合賦值運算符:`b1 += b2;` / `b1 -= b2;`
    JLS 規定複合賦值**隱式包含轉型**:`b1 += b2` 等價於 `b1 = (byte)(b1 + b2)`,安全且簡潔。

設計哲學

避免「靜默截斷」導致難以發現的邏輯錯誤。`int` 為 JVM 運算棧標準單元,32 位對齊訪問最高效,強制開發者顯式確認窄化轉換意圖。

對比:C/C++ 整型提升

C/C++ 同樣將 `char`/`short` 提升為 `int` 運算,但允許隱式窄化賦值(僅警告),C++ `byte` 非標準類型(通常 `uint8_t`/`int8_t` 行為一致)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved