当前位置: 首页 > 面试题库 >

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

太叔睿
2023-03-14
问题内容

如果声明类型为byte或short的变量并尝试对其进行算术运算,则会收到错误“类型不匹配:无法将int转换为short”(或相应的“类型不匹配:不能将int转换为byte”)。

byte a = 23;
byte b = 34;
byte c = a + b;

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


问题答案:

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

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

字节a = 23;
字节b = 34;
字节c =(字节)(a + b);

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

更新:jrudolph建议此行为基于JVM中可用的操作,尤其是仅实现全字和双字运算符。因此,对于字节和短裤运算符,必​​须将它们转换为int。



 类似资料:
  • 问题内容: 在日食中显示错误。这是总和是122字节范围内的范围。所以为什么我在这里出现此错误。 提前致谢… 问题答案: 当您对字节执行数学运算时,Java会对字节进行扩展(自动类型提升)到字节(隐式转换)以对这种情况进行整数处理。所以当你表演 由于t1 + t2的结果比字节宽,因此您需要将其下转换为字节。 消除编译错误。 有关更多信息,请阅读 JLS 5.1.2

  • 问题内容: 我有以下几行代码 我认为第3行和第4行执行相同的任务,然后为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int” 请帮忙。 问题答案: 这是因为复合赋值运算符会进行隐式转换。 从JLS复合分配运算符: 形式的复合赋值表达式等效于,其中是的类型,不同之处在于该表达式仅被评估一次。 对于二进制运算符,则必须显式进行强制转换。进行第四项作业: 它会工作。这就是您的复合赋值表达

  • 我在运行程序时遇到这个错误 线程“main”java.lang.Error:未解决的编译问题:类型不匹配:无法从FirefoxDriver转换为WebDriver 1.我已经提取了所有selenium jar文件(使用版本-3.141.59) 仍然得到错误。 导入org.openqa.selenium.webdriver;导入org.openqa.selenium.firefox.firefoxd

  • 而当运行时,我收到的是: 错误:不兼容类型:int无法转换为客户端ClientDAO.Delete(clientId);

  • 我正在使用java,这似乎是一个非常简单的三元条件。 这是它抛给我的错误: 我来自C#背景,所以可能我遗漏了一些非常明显的东西。