为什么不能将原始值(例如双精度)强制转换为对象(例如,字节)?
double x = 99;
Byte r = (Byte) x; // Error: Cannot cast from double to Byte
System.out.println(r);
答案 0 :(得分:5)
Java不会隐含地缩小原始值,例如:从double
到byte
,以便您可以通过装箱转换将其显式转换为Byte
。这样可以防止意外丢失精确度。
您可以做的是明确地将double
强制转换为byte
(小写);然后Java会隐式将byte
打包成Byte
。当你明确地将原始值转换为更窄的范围类型时,那么你告诉编译器,&#34;是的,我意识到我可能会失去精确度,但我仍然想要这种转换。&#34; < / p>
Byte r = (byte) x;
答案 1 :(得分:1)
您不能从double转换为byte,因为该字节的范围小于double,并且它不包含像double那样的小数。
例如:程序不知道如何将1000.5转换为一个字节。一个字节的最大值为128(我相信),它不能包含小数(即.5)