我正在用Herbert Schildt的书来学习Java:Java初学者指南.在那本书中出现了这段代码:
// A promotion surprise!
class PromDemo{
public static void main(String args[]){
byte b;
int i;
b = 10;
i = b * b; // OK, no cast needed
b = 10;
b = (byte) (b * b); // cast needed!!
System.out.println("i and b: " + i + " " + b);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我必须在行中使用(byte):
b = (byte) (b * b); // cast needed!!
Run Code Online (Sandbox Code Playgroud)
b被定义为一个字节,b*b的结果是100,这是一个字节的正确值(-128 ... 127).
谢谢.
JLS(5.6.2.二进制数字促销)给出了关于将数值类型与二元运算符组合的规则,例如乘法运算符(*):
- 如果任一操作数的类型为double,则另一个操作数将转换为double.
- 否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float.
- 否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long.
- 否则,两个操作数都将转换为int.
最后一点适用于您的情况,字节转换为整数然后相乘.
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |