首页 / 知识
Java:为什么收到错误消息“类型不匹配:无法将int转换为字节”
2023-04-16 11:28:00

Java: why do I receive the error message “Type mismatch: cannot convert int to byte”如果声明类型为byte或short的变量并尝试对其进行算术运算,则会收到错误"类型不匹配:无法将int转换为short"(或相应的"类型不匹配:无法将int转换为byte")。
在此示例中,编译错误在第三行。 尽管算术运算符被定义为可以对任何数字类型进行运算,但是根据Java语言规范(5.6.2二进制数字提升),字节和short类型的操作数在被传递给运算符之前会自动提升为int。 要对byte或short类型的变量执行算术运算,必须将表达式用括号括起来(在括号内将以int类型进行运算),然后将结果转换回所需的类型。
这是真正的Java专家的一个后续问题:为什么? byte和short类型是完美的数字类型。为什么Java不允许对这些类型进行直接算术运算? (答案不是"精度下降",因为没有明显的理由首先将其转换为int。) 更新:jrudolph建议此行为基于JVM中可用的操作,尤其是仅实现全字和双字运算符。因此,对于字节和短裤运算符,必??须将它们转换为int。 您的后续问题的答案在这里:
因此,在您的示例中, 我认为问题是,JVM仅支持两种类型的堆栈值:字大小和双字大小。 然后,他们可能决定只需要一个对堆栈上字长的整数进行运算的操作。因此,在字节码级别只有iadd,imul等(并且没有用于字节和短裤的运算符)。 因此,您将得到一个int值,这些操作是Java无法安全地转换回较小字节和short数据类型的结果。因此,它们迫使您强制将值缩小到字节/短。 但是最后您是对的:例如,此行为与int的行为不一致。您可以毫无疑问地添加两个整数,并且如果结果溢出也不会出错。 Java语言始终将算术运算符的参数提升为int,long,float或double。因此,使用以下表达式:
其中a和b是字节类型。这是以下内容的简写:
此表达式的类型为int。将int值分配给字节变量时,给出错误显然很有意义。 为什么要用这种方式定义语言?假设a为60而b为70,则a + b为-126-整数溢出。作为可能导致int的更复杂表达式的一部分,这可能会成为一个困难的错误。限制使用字节和数组存储的简短形式,文件格式/网络协议和拼图的常量。 JavaPolis 2007上有一个有趣的记录。JamesGosling给出了一个例子,说明无符号算术有多么复杂(以及为什么Java中没有它)。乔什·布洛赫(Josh Bloch)指出,他的例子在正常的有符号算术下也给出了错误的例子。对于可理解的算法,我们需要任意精度。 |
最新内容
相关内容
linux命令错误的是?
linux命令错误的是?,系统,信息,异常,密码,工具,地址,网络,实时,状态,数据,Linux系统中输入命令,输出结果有误是怎么回事?出现以上提示,很多原因linux显示错误命令?
linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚拟机里怎么开始linux系统,打startx命令提示错误1、第一种:这个问题linux退出错误命令的?
linux退出错误命令的?,系统,电脑,环境,命令,位置,管理,工具,设备,终端,进程,Linux命令格式错误出现大于号怎么退出1、ctrl+c,终止当前运行命令linux变量释放命令?
linux变量释放命令?,系统,环境,名称,工具,官网,简介,变量,环境变量,命令,内存,如何手动释放Linux内存?1、也就是说可以通过修改/proc中的文件,linux没有该命令错误?
linux没有该命令错误?,系统,第一,环境,命令,分析,软件,异常,文件,目录,空格,不知道为什么在linux命令行下输入一些命令怎么都显示没有找到?1、linux调出变量的命令?
linux调出变量的命令?,系统,工作,工具,信息,地址,代码,标准,名称,官网,命令,linux环境变量怎么设置方法方法一:用export命令,输入“export PATH=查看linux类型命令?
查看linux类型命令?,系统,信息,命令,状态,数据,数字,情况,地址,类型,文件,linux查看系统命令是什么1、linux怎么查看系统版本呢,下面就让我们来linux命令错误代码?
linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Linux管理常见错误1、检查权限:使用文件浏览器和终端,检查文件的访问linux删除类型命令?
linux删除类型命令?,系统,档案,命令,文件,名称,环境,数据,不了,目录,文件夹,关于linux的删除命令命令格式:rm [选项] 文件… 命令功能:删除一个linux命令主机名变量?
linux命令主机名变量?,系统,主机名,查询系统,命令,终端,编辑,提示符,根目录,文件,用户,linux如何修改主机名首先,以 root 用户身份登录 Red Hat查看linux库类型命令?
查看linux库类型命令?,系统,工作,信息,状态,电脑,命令,工具,代码,地址,发行,如何查看Linux上程序或进程用到的库查看程序依赖的动态库:readelflinux网卡类型命令?
linux网卡类型命令?,网络,系统,地址,信息,设备,状态,服务,名称,名字,网卡,如何配置Linux网卡配置网卡地址:点击 网络(K) 按钮进行配置网络 选择