当前位置: 首页 > 知识库问答 >
问题:

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

唐俊爽
2023-03-14

我试图为学校编写一些东西,但我不断收到这个编译错误:

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

A = (字节)C / (字节)B;

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

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

共有3个答案

罗安和
2023-03-14

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

A = (byte) (C / B);
诸葛皓
2023-03-14

来自JavaSpec:

5.6.2二进制数字提升

当运算符对一对操作数应用二进制数值提升时,每个操作数必须表示一个数值类型的值,以下规则适用,以便在必要时使用加宽转换(§5.1.2)转换操作数:

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

否则,如果其中一个操作数是float类型,另一个操作数将被转换为float。

否则,如果任一操作数是long类型,则将另一个操作数转换为long。

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

含义如下:(字节)C / (字节)B =

因此,像A = (字节)(C / B); 这样的东西会更好。

靳举
2023-03-14

原因是您没有将除法运算的整数结果转换为字节:

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
 类似资料: