byte类型转换细节分析:Type mismatch: cannot convert from int to byte?出现这个报错的解决方案

眉间皱痕 提交于 2019-12-02 06:35:48

面对这种问题,大家应该都有这样的疑惑,我全部都是byte类型的数据,而且两个相加也并没超过byte类型的表示范围,但是为什么会报错Type mismatch: cannot convert from int to byte

接下来为大家解惑:

n,m,b确实都是byte类型,但是在此代码中它们也是变量,两个变量相加有可能超过byte的表示范围,所以java就将右边相加的两个数由byte变成int型,再相加,这样右边的大的数据类型int就需要往小的数据类型byte转换,只能强制转换了。所以会报错。

大家再看一个代码:

这个代码当中右边直接给出数字,java就知道3+4是否会超过byte的表示范围,如果超了便会报错代码如下,不超就不会报错;

不超的话;由于4和3默认是int,java会将3和4通过隐式类型转换成byte类型再相加。

从小的byte类型可以类型自动提升成int,所以n会自动变成int型,再相加再赋值;不需要强制转换。

 

读完这片博客之后,可能有很多人会有这样的两个疑问:

1、java明明知道变量的值,为什么不能判断是否超过其表示范围呢?

答:因为,变量内容的存储是在常量池,java需要先获取变量地址,再获取变量空间里的内容(存的是变量值的地址),再通过这个地址找到变量所存储的内容;这一系列的操作是在做计算时才会去做的,所以光看一个变量是无法看出是否超过范围的,而3+4直接就可以看出来。

 

2、为什么byte由于变量未知导致无法知道是否超过其表示范围,而会自动提升到int,int面对同样的情况为什么不自动提升到long类型呢?

答:我自己的解释是,由于byte表示范围实在是太小了,一般的数学计算都会超过它,而int型基本满足了普通程序员的绝大部分的计算需求,所以int型设置为默认类型也是这样的原因。所以byte在变量的情况下会自动提升到int,而int不会自动提升。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!