Float f = new Float(10.71);
byte b = (byte)f;
Cannot cast from Float to byte
为什么我必须这样做?
byte b = (byte)(float)f;
Float f = new Float(10.71);
byte b = (byte)f;
Cannot cast from Float to byte
为什么我必须这样做?
byte b = (byte)(float)f;
由于Float
是一个“盒装”float
,你不能直接施放它。然而,在你的情况,你不需要造型处理 - you can go directly to byte
,就像这样:
byte b0 = f1.byteValue();
以上是可能的,因为Float
是java.lang.Number
一个子类,它提供了byteValue()
方法。
您不能将对象转换为基元。
但是,你可以从Number
类使用byteValue()
方法。
您可以使用“演员操作员”将“Float”转换为“float”。你不能做的事情是立即开箱并转换。 –
这不是演员,马可。执行拆箱操作,而不是演员。 –
在这个问题或答案中都没有涉及任何事情。因此,无论是“无法将对象转换为原语”这句话都是无关紧要的,因为您无法将“float”转换为“字节”,或者,如果我们接受较宽松的含义,则不正确,因为您*可以*将“cast”运算符应用于“Float”并获得一个“float”。 –
不完全是某些但不是你做
byte bo = f1.byteValue();
注意对类和原语之间的差异。
你将永远不会被允许CASY任何对象为原始。这些是不同的实体作为对象创建通过实例化,因此JVM将对象和基元视为不同的实体,而它们之间没有关系。
与原语类(整数,浮点数,...)用来包装这些原语,并提供一些操作方法。此外,这些类有一个特定的转换过程,允许然后返回它们要包装的原语。
只有这些对象
float myFloat = (float)f;
一旦你的对象转换为浮动型,相当于
float myFloat = f.floatValue();
,你可以向后它转换为int(这将删除小数数字显然)。
int myInt = (int)(float)f;
int mySameInt = (int)f.floatValue(); //same value than above
您正在将'Float'转换为'float'而不是'float'转换为'float',细微差别。 –
微妙之处在于肤浅的语法。顺便说一句'Float'->'float'和'float'->'byte'都不是实际的投射:首先是拆箱,其次是缩小转换。 –
@KevinDiTraglia是啊。我编辑过,因为标题有误导性。 –