发布
社区首页 >问答首页 >为什么Byte.parseByte的结果被认为是整数?

为什么Byte.parseByte的结果被认为是整数?
EN

Stack Overflow用户
提问于 2014-11-17 12:35:33
回答 3查看 257关注 0票数 0

我是Java的初学者,我在玩弄原始的数字类型,当我将字符串解析为Byte时,我无法处理产生的字节变量(我正在对其进行平方),因为返回的错误“类型不匹配:不能从int转换到字节”。

代码语言:javascript
代码运行次数:0
复制
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都有这个问题,但是没有其他原始的数字类型?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-17 12:38:31

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

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

您可以将操作的结果转换回byte,以使代码正常工作,不过,如果计算结果不再适合byte (例如,12将适合于一个字节,而12 * 12则不会),您应该考虑想要发生什么事情。

票数 0
EN

Stack Overflow用户

发布于 2014-11-17 12:37:57

默认情况下,*运算符返回int。如果您想要另一种类型,如byte,则必须执行强制转换,但存在溢出该类型的风险。

代码语言:javascript
代码运行次数:0
复制
return (byte) (result * result);

想象一下,如果乘法超过了127的值,即字节限制,会发生什么情况?

票数 1
EN

Stack Overflow用户

发布于 2014-11-17 12:38:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26972858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档