我正在用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 次  |  
        
|   最近记录:  |