为什么Byte.parseByte的结果被识别为整数?

时间:2014-11-17 12:35:34

标签: java type-conversion

我是Java的初学者,我正在使用原始数字类型,当我将字符串解析为字节时,我无法处理生成的字节变量(我的平方它返回错误"类型不匹配:无法从int转换为字节。"

static byte squareByte(String p1){


       //parse String to byte

        byte result = Byte.parseByte(p1);


       //return type byte

       return result * result;
}

我使用了" System.out.println(((Object)result).getClass()。getName());"在解析为byte之后确定变量类型,并打印出它是byte,那么为什么我得到一个关于结果为int的错误?

我发现我必须parseByte然后为了乘法才能使Byte工作,有人可以解释为什么我有Byte和Short这个问题,但没有任何其他原始数字类型?

3 个答案:

答案 0 :(得分:1)

默认情况下,*运算符返回int。如果您想要其他类型,例如byte,则必须进行投射,但风险可能会超出类型。

return (byte) (result * result);

想想如果乘法超过127的值,即字节限制会发生什么?

答案 1 :(得分:0)

这是因为JLS指定乘法/加法等数学运算必须返回int 您必须使用 - return (byte) (result * result);将整数结果显式转换为byte。

答案 2 :(得分:0)

当您使用小于+,-,*,/ or %的基本类型执行任何算术运算(即int)时,在算术完成之前将值隐式转换为int。这意味着byte * byte的结果将是int,而不是byte,如您所料。

您可以看到一些进一步的解释和示例here

您可以将操作结果强制转换为byte以使代码正常工作,但如果计算结果不再适合{{1},您应该考虑要发生什么(例如byte将适合一个字节,但12不会)