我是Java的初学者,我在玩弄原始的数字类型,当我将字符串解析为Byte时,我无法处理产生的字节变量(我正在对其进行平方),因为返回的错误“类型不匹配:不能从int转换到字节”。
static byte squareByte(String p1){
//parse String to byte
byte result = Byte.parseByte(p1);
//return type byte
return result * result;
}
我使用了"System.out.println(对象)结果).getClass().getName()“来确定变量类型,在解析到字节之后,它会打印它是字节,那么为什么我会得到一个关于结果是int的错误呢?
我发现我必须先parseByte,然后才能让乘法工作,有人能解释一下为什么我对Byte和Short都有这个问题,但是没有其他原始的数字类型?
发布于 2014-11-17 12:38:31
当您使用小于+,-,*,/ or %
的基元类型执行任何算术操作(即int
)时,这些值在完成算术之前被隐式转换为int。这意味着byte * byte
的结果将是int
,而不是您所期望的byte
。
您可以看到一些进一步的解释和示例这里
您可以将操作的结果转换回byte
,以使代码正常工作,不过,如果计算结果不再适合byte
(例如,12
将适合于一个字节,而12 * 12
则不会),您应该考虑想要发生什么事情。
发布于 2014-11-17 12:37:57
默认情况下,*
运算符返回int
。如果您想要另一种类型,如byte
,则必须执行强制转换,但存在溢出该类型的风险。
return (byte) (result * result);
想象一下,如果乘法超过了127
的值,即字节限制,会发生什么情况?
发布于 2014-11-17 12:38:26
这是因为JLS指定数学运算(如乘法/加法等)必须返回一个必须使用- return (byte) (result * result);
显式将整数结果转换为字节的return (byte) (result * result);
。
https://stackoverflow.com/questions/26972858
复制相似问题