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

Java byte 類型相加編譯錯誤:自動類型提升導致精度丟失風險

     編輯:程式設計綜合問答

錯誤代碼

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

原因

Java 整數運算**自動提升至 `int`** 類型。`b1 + b2` 結果為 `int`,賦值給 `byte` 需顯式強轉,否則編譯器報「可能損失精度」錯誤(雖然實際值 3 在 byte 範圍內,編譯器只看類型)。

修正方式

byte b3 = (byte)(b1 + b2); // 顯式強制轉型
// 或
int b3 = b1 + b2; // 接收為 int,避免轉型

設計哲學

防止隱式窄化轉換導致數據截斷(如 `byte b = 200; b = (byte)(b + 100);` 會溢出變為 -56)。強制程序員確認數值範圍安全後再轉型。

對比:`+=` 隱式轉型

byte b = 1;
b += 2; // 編譯通過!等價於 b = (byte)(b + 2)

復合賦值運算符包含隱式強轉,是 Java 語言規定的特例。

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