我尝试为学校编写代码,但我不断收到此编译错误:
错误:不兼容的类型:从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;
答案 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);