促销的规则是"当操作数具有不同类型时,自动二进制数字促销发生,较小的操作数类型转换为较大的".但操作数是相同类型的,例如,
byte=byte+byte // Compile time error... found int..
Run Code Online (Sandbox Code Playgroud)
那为什么会这样呢?
Jon*_*eet 47
没有+运算符byte.相反,两个操作数都被提升为int,所以你得到了
byte = byte + byte
... becomes (widening to find + operator) ...
byte = int + int
... becomes (result of + operator) ...
byte = int
Run Code Online (Sandbox Code Playgroud)
......然后失败,因为有一个从没有隐式转换int到byte.你需要施放:
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
Run Code Online (Sandbox Code Playgroud)
以下是数字推广的实际规则,来自JLS的5.6.2节:
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则按顺序应用,使用扩展转换(第5.1.2节)根据需要转换操作数:
den*_*nov 17
您收到了关于自动升级到'int'的正确答案.
还有一点需要注意 - 复合赋值运算符的行为与它们具有隐式类型的情况相同.例:
byte b1 = 1;
byte b2 = 2;
b1 = b1 + b2; // compilation fails
b1 += b2; // compilation successful
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15515 次 |
| 最近记录: |