为什么不能将原始值(例如双精度值)转换为对象(例如字节)?
double x = 99;
Byte r = (Byte) x; // Error: Cannot cast from double to Byte
System.out.println(r);
Java 不会隐式缩小原始值的范围,例如从 double
到 byte
,以便您可以通过装箱转换将其显式转换为Byte
。 这可以防止意外损失精度。
你可以做的是将double
显式转换为byte
(小写);然后Java会将byte
隐式包装到Byte
中。 当您将基元值显式强制转换为范围较窄的类型时,您是在告诉编译器,"是的,我知道我可能会失去精度,但无论如何我都想要这种转换。
Byte r = (byte) x;
不能从双精度转换为字节,因为字节的范围小于双精度,并且不像双精度字节那样包含小数。
例如:程序不知道该怎么做才能将 1000.5 转换为字节。 一个字节的最大值为 128(我相信),它不能包含小数(即 .5)