关于byte a=1;byte b=2;byte c=a+b;报错,而byte d=1+2;却不报错,这个问题的原因和自己的一些理解

我们来看一下代码---->

byte a=1;
byte b=2;
byte c=a+b;//编译不通过
byte d=1+2;//编译通过

首先我们来看 byte c=a+b;报错的原因

        提示的是需要byte类型却找到的是int类型,明明是两个byte类型呀,为什么说找到的是int类型呢?说明虚拟机“认为”a+b是int类型
那么问题就来了,byte d=1+2;这里=右边的1+2不也是int类型吗为什么它却不报错呢?

        我刚开始也一直想不通,后来发现这里byte d=1+2;不就相当于byte d=3;吗,这和第一、二行的代码有区别吗?我们知道在给byte类型的变量赋值的时候,虚拟机会自动地识别右边int类型常量是否在byte类型地取值范围类  [-128,128),如果不在则会报错,说到这里是不是已经恍然大悟了,如果还不理解可以看一下这种情况:

         所以说byte d=1+2;能编译通过,是因为虚拟机提前把1+2的结果计算出来之后,并判断结果在取值范围之内,故编译通过;而byte c=a+b;之所以不能通过编译,是因为虚拟机无法判断a+b的结果是否在取值范围内,也就是不知道会不会出现像上图的情况。总而言之就是两个byte变量相加有可能超过byte的取值范围,所以会报错。

        至此就是我对这个问题的理解,如有不对的地方欢迎dalao们指教。^-^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值