JAVA为什么byte b=a+1会报错

bytea=1;//这个不会报错,1默认是int类型,在byte可以表示的范围内byteb=a+1;//这个就报错,a+1=2,结果是int型,也在byte可以表示的范围... byte a=1;//这个不会报错,1默认是int类型,在byte可以表示的范围内
byte b=a+1;//这个就报错,a+1=2,结果是int型,也在byte可以表示的范围之内,为什么不可以赋给byte
展开
 我来答
☆ヾ冰凉
2019-10-24
知道答主
回答量:10
采纳率:0%
帮助的人:6209
展开全部
byte a= 1;∥=号后面是个常量时,=号会自动类型转换,int类型1,转换成byte类型。
float a =1.0F;∥=号后面是个常量时,=号会自动转换类型,double类型1.0,转换成float类型。
char x = 'a';∥+号后面是个常量时,=号会自动转换类型,int类型97,转换成char类型。
——————————————————————————————
byte a = 1;
byte b = a+1;∥+会自动提升类型,a被提升为int,a+1是个表达式,是不确定的,所以=不会自动转换类型,需要,改为byte b = (byte)(a+1)
————————————————————————————————
byte a = 1;
a +=2;∥+把a被提升为int类型,2取自常量池int,1+2得3,常量+常量得常量,常量在+=(=)后面,自动转换类型,不报错。
——————————————————————————————————
int a = 1;
int b = a+1;∥int类型a加int类型1,结果为int类型的值(a+1),int变量的值,肯定可以放入int变量里,所以int b= a+ 1不报错。
流浪汉眼中的泪
2014-01-22 · 超过17用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:45.4万
展开全部
以前好像遇到过,jdk里面有个自带的转换机制,第一个语句他会默认的把1转换成byte类型,而第二个,1是int类型而a和b是byte类型,在运算的时候a会自动转换为int类型与1相加,而结果会变成int类型,这个时候大类型就不能自动转化成小类型,必须强制转换byte b = (byte) (a+1);大概是这么个意思
追问
那第一个1也是int啊,怎么第一个就可以赋给byte呢
追答
当字面整数常量保存到byte、short、long 或char类型的变量中时,Jdk会执行自动类型转换,概括说就是整型值赋值的时候可以自动转换
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzyaiweier
2014-01-22 · TA获得超过347个赞
知道小有建树答主
回答量:185
采纳率:100%
帮助的人:93.6万
展开全部
byte b=a+1; 这里java中数值加减都是转换为int来加减,结果也是int类型的
int类型是大范围类型,赋值给小类型需要强制转换即可,修改如下
byte b=(byte)(a+1);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xqqlxm
2014-01-22 · TA获得超过338个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:231万
展开全部
转型 1默认是int类型,byte+int类型这个语法是不通的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔羯座_轩
2014-01-22 · TA获得超过225个赞
知道答主
回答量:104
采纳率:0%
帮助的人:32.4万
展开全部
java中,a+1默认强转成int型,而且你都知道结果是int型了,怎么能赋值给一个byte型变量呢?
String str = "1";
int a = 1;
能把str赋值给a吗?
追问
我的意思是第一个式子1也是int,可以赋给byte,第二个a+1的结果也是int,为什么第二个不能赋给byte
追答
你的第一个式子 byte a = 1 这里的1不是int型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式