byte b = 10;为什么b=b+5;编译报错?

byte类型的b与int类型的5混合运算结果为int类型的15,没有超过byte的取值范围,应该可以直接赋值,不必强制类型转换呀?... byte类型的b与int类型的5混合运算结果为int类型的15,没有超过byte的取值范围,应该可以直接赋值,不必强制类型转换呀? 展开
 我来答
紫薇参星
科技发烧友

2021-12-06 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3569万
展开全部

b=b+5需要强转的原因在于Java的运算机制,在Java中两个变量只要参与了数学运算,

就有可能进行类型提升,只要类型比int小(即byte,char,short),那么在运算之前,

这些值会自动转换成int,所以需要运算后强转成byte类型.

具体的Java程序如下(见图)

更多追问追答
追问
请问:byte类型的b和int类型的5进行混合运算,都变为int类型再运算,结果为int类型的15。15没有超过byte类型的取值范围,为什么还要加强制类型转换符(byte)才行呢?
如果你回答,编译只检查语法,不运行程序。——那为什么:b=1+5;可以呢?(1是int,5也是int,编译不计算,知道1+5是int类型,照理说只检查语法没加强制转换(byte)应该也会编译不通过啊?)???
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
我是worden
2021-12-07 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:281
采纳率:40%
帮助的人:23.7万
展开全部
看了以下网友的回答以及你的提问,感觉你弄错了两点

第一:不同类型的值相加必须得强转为相同类型,跟取值范围没关系,除非你规定后面 的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优待,没超他们的范围就不用写强制类型转换符。
追答
既然你知道的比我们还清楚,那你还问什么呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神官0麦依0
科技发烧友

2021-12-07 · 有一些普通的科技小锦囊
知道小有建树答主
回答量:1145
采纳率:75%
帮助的人:372万
展开全部
因为你的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就可以编译通过了呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yiqunsb58

2021-12-06 · 贡献了超过402个回答
知道答主
回答量:402
采纳率:3%
帮助的人:15.9万
展开全部
建议你检查前面的有没有问题,没有问题应该不会报错才对
更多追问追答
追问

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式