簡體   English   中英

原始型鑄造

[英]Primitive type casting

我最近一直在使用Java的字節原語,我遇到了一個愚蠢的問題:

byte a = 10;
byte b = 9;
byte c = 8;
b += b*c;    // how come this statement is correct without any explicit type casting
b =  b*c;    // while this statement is incorrect; it requires explicit cast, of course
b = b+(b*c); // this is wrong too.

所以我的問題是, +=指定除了添加和賦值之外的任何賦值,或者這是Java中的錯誤(我幾乎可以肯定不是)?

因為b += b*c等於b += (byte) ((b) + (b*c))

復合賦值運算符的Java語言規范:

形式E1 op = E2的復合賦值表達式等效於E1 =(T)((E1)op(E2)),其中T是E1的類型,除了E1僅被評估一次。

所有復合賦值運算符不僅執行操作,還會自動將其結果轉換為左側變量的類型。

所以你的+ =不僅添加變量並分配結果 - 它還將結果轉換為正確的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM