Float f = new Float(10.71);
byte b = (byte)f;
我能理解
Cannot cast from Float to byte
为什么我必须做这件事?
byte b = (byte)(float)f;
你不能将一个Object
强制转换为基本类型。你只能通过Java的自动装箱特性,将Float
强制转换为float
。
这个“特性”一直受到开发者的无休止攻击,但我想它因向后兼容性而存在。
我也不喜欢它,但你必须学会与之共存。尽可能不要使用Long
或Float
,因为如果你试图使用null
值进行计算,这是不好笑的。
由于Float
是一个“装箱的”float
,因此您无法直接进行强制转换。但在您的情况下,您根本不需要进行转换 - 您可以像这样直接使用byte
:
byte b0 = f1.byteValue();
Float
是java.lang.Number
的子类,而后者提供了byteValue()
方法。float myFloat = (float)f;
等同于
float myFloat = f.floatValue();
int myInt = (int)(float)f;
int mySameInt = (int)f.floatValue(); //same value than above
不是很确定,但你不能这样做吗?
byte bo = f1.byteValue();
你无法将一个对象强制转换为原始类型。
但是,你可以使用Number
类中的byteValue()
方法。
Float
转换为 float
。但你不能同时进行拆箱和转换。 - Marko Topolnikfloat
转换为byte
,或者如果我们接受更宽松的含义,那么这个语句是不正确的,因为你可以对Float
应用“cast”运算符并得到一个float
。 - Marko Topolnik
Float
强制转换为float
而不是将float
转换为float
,这是微妙的区别。 - Kevin DiTragliaFloat
->float
和float
->byte
都不是实际的转换:前者是拆箱,后者是缩窄转换。 - Marko Topolnik