byte b = 10;为什么b=b+5;编译报错?
byte类型的b与int类型的5混合运算结果为int类型的15,没有超过byte的取值范围,应该可以直接赋值,不必强制类型转换呀?...
byte类型的b与int类型的5混合运算结果为int类型的15,没有超过byte的取值范围,应该可以直接赋值,不必强制类型转换呀?
展开
4个回答
展开全部
更多追问追答
追问
请问:byte类型的b和int类型的5进行混合运算,都变为int类型再运算,结果为int类型的15。15没有超过byte类型的取值范围,为什么还要加强制类型转换符(byte)才行呢?
如果你回答,编译只检查语法,不运行程序。——那为什么:b=1+5;可以呢?(1是int,5也是int,编译不计算,知道1+5是int类型,照理说只检查语法没加强制转换(byte)应该也会编译不通过啊?)???
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
展开全部
看了以下网友的回答以及你的提问,感觉你弄错了两点
第一:不同类型的值相加必须得强转为相同类型,跟取值范围没关系,除非你规定后面 的5为byte类型
第二:b = 1 + 5;跟b = 6;一样,相当于直接赋值,你也可以理解为byte类型的1和byte类型的5相加,然后将结果赋值给了b,如果这都报错的话,那你直接赋值不也是报错么
第一:不同类型的值相加必须得强转为相同类型,跟取值范围没关系,除非你规定后面 的5为byte类型
第二:b = 1 + 5;跟b = 6;一样,相当于直接赋值,你也可以理解为byte类型的1和byte类型的5相加,然后将结果赋值给了b,如果这都报错的话,那你直接赋值不也是报错么
更多追问追答
追问
我知道:byte,short,char做混合运算时都要变成int类型再做运算;多种数据类型(有byte,short,char以外的时)都变成容量最大的那种数据类型,再做运算。
6可以直接赋值是因为6没有超出byte的取值范围,写强转byte和不写强转byte都一样,不会损失精度,所以sun公司为了程序员写程序方便,给了byte,short,char优待,没超他们的范围就不用写强制类型转换符。
追答
既然你知道的比我们还清楚,那你还问什么呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的5默认是int型的不能直接转成byte,必须强转b = (byte)(b + 5);
追问
byte类型的b加默认int类型的5,混合运算都要变成最大容量的那种即int类型再做运算,结果为int类型的15,赋值给左边byte类型的b,int类型的15没有超出byte的取值范围,应该可以直接赋值给byte类型的b呀?——我哪里想错了呢?
如果是因为编译器只检查语法,不运行程序,不知道b+5是多少,所以要加byte,那为什么用1+5就可以编译通过了呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询