不兼容的类型:从int到byte的可能有损转换

时间:2016-03-16 15:45:15

标签: java

我尝试为学校编写代码,但我不断收到此编译错误:

  

错误:不兼容的类型:从int到byte的可能有损转换

     

A =(字节)C /(字节)B; <​​/ p>

System.out.println("Aufgabe 4");

byte A=11; int B, C;
B = A + A;
C = B * (int)1.0;
A = (byte)C / (byte)B;

5 个答案:

答案 0 :(得分:3)

原因是你没有将除法运算的整数结果转换为byte:

A = (byte) C / (byte)B; // you cast C to byte, cast B to byte and then make division

相反,只投射结果

A = (byte) (C / B);  // this is casting result to byte

答案 1 :(得分:0)

来自JavaSpec:

  

5.6.2二进制数字促销

     

当运算符将二进制数字提升应用于一对时   操作数,每个都必须表示数值类型的值,   以下规则适用于使用扩展转换(第5.1.2节)   根据需要转换操作数:

     

如果任一操作数的类型为double,则另一个操作数转换为double。

     

否则,如果任一操作数的类型为float,则转换另一个操作数   漂浮。

     

否则,如果任一操作数的类型为long,则转换另一个操作数   很久。

     

否则,两个操作数都将转换为int类型。

含义如下:(byte)C / (byte)B =&gt;由于您没有double,float或long,因此都转换为int。 这使得结果为int。而你不能调用字节A = SomeInt;你必须先重新投射它。

A = (byte)(C / B);这样的东西会更好。

答案 2 :(得分:0)

您的结果将以整数形式出现。您应该转换它而不是变量:

A = (byte) (C / B);

答案 3 :(得分:0)

表达式中的类型提升(研究此主题)

答案 4 :(得分:0)

当我们尝试将大尺寸类型的变量分配给小尺寸类型时,Java将生成错误的,不兼容的类型:可能在编译代码时进行有损转换。

当我们对小于Integer的基本类型执行算术运算时,Java会自动将其转换为Integer。对于较大的基元,类型不会更改。

byte A=11; int B, C;    //line 1
A = (byte)C / (byte)B;  //line 2

在第2行(上述代码)中,当对字节值执行除法运算时,右侧转换为Integer。您可以尝试以下提到的代码:

Object obj = (byte)C / (byte)B;
System.out.println(((Object)obj).getClass().getName());

这将打印java.lang.Integer

要解决此问题,可以将整个结果转换为字节:

A = (byte) (C / B);
相关问题