首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:为什么我收到错误消息“类型不匹配:无法将int转换为byte”

Java:为什么我收到错误消息“类型不匹配:无法将int转换为byte”
EN

Stack Overflow用户
提问于 2019-04-08 00:43:01
回答 2查看 0关注 0票数 0

如果声明byte或short类型的变量并尝试对这些变量执行算术运算,则会收到错误“Type mismatch:can int int int to short”(或相应的“Type mismatch:can int int to int”)。

代码语言:javascript
复制
byte a = 23;
byte b = 34;
byte c = a + b;

在此示例中,编译错误位于第三行。

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 08:53:27

虽然算术运算符被定义为对任何数字类型进行操作,但根据Java语言规范(5.6.2 Binary Numeric Promotion),byte和short类型的操作数在被传递给运算符之前会自动提升为int。

要对byte或short类型的变量执行算术运算,必须将表达式括在括号中(其中的操作将以int类型执行),然后将结果转换回所需的类型。

代码语言:javascript
复制
字节a = 23;
字节b = 34;
字节c =(字节)(a + b);

这是真正的Java专家的后续问题:为什么?字节和短字类型是完美的数字类型。为什么Java不允许对这些类型进行直接算术运算?(答案不是“精度损失”,因为没有明显的理由首先转换为int。)

更新:jrudolph表明此行为基于JVM中可用的操作,具体而言,仅实现了全字和双字运算符。因此,对于字节和短路的运算符,它们必须转换为int。

票数 0
EN

Stack Overflow用户

发布于 2019-04-08 10:23:23

您的后续问题的答案如下:

在传递给运算符之前,byte和short类型的操作数会自动提升为int

因此,在您的示例中,a在被传递给+运算符之前都被b转换为int。将两个int加在一起的结果也是一个int。尝试将其分配intbyte值会导致错误,因为可能会丢失精度。通过显式地转换结果,您告诉编译器“我知道我在做什么”。

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

https://stackoverflow.com/questions/-100001088

复制
相关文章

相似问题

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