A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

以下代码哪个是正确的?为什么?

a. byte b = 1 + 1;               对
b. byte b = 1; b = b + 1;     错
c. byte b = 1; b = b += 1;   对
d. byte b = 1; b = ++b;       对

4 个回复

倒序浏览
b中错的原因是b=b+1,1是int类型,b是byte类型,无法将int隐式转换为byte。
回复 使用道具 举报
又是这个问题,byte在运算中自动提升为Int型,b+1为int了,再赋给byte时丢失精度,而byte b =1 +1 , 赋值中会判断1+1结果2在byte范围内自动转换,

byte b += 1,+=是赋值运算符,b在两边加1,再判断在byte范围内自动转换成byte型,++b是b自动自增,先生成值再执行赋值运算。
回复 使用道具 举报
A)byte b=1+1      正确:因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2,所以不会报错,可以运行。
B)byte b=1;b=b+1  错误:因为b=b+1的结果是int类型,不能赋值于byte类型的b。
C)byte b=1;b=b+=1 正确:因为“+=”首先会将右边的数值“1”强制转换成与左边数值相同的数据类型byte,再执行运算,并且结果与左边的数据类型相同,可以赋值给“b”,所以可以                        运行。
D)byte b=1;b=++b  正确:因为自增运算符的运算结果的数据类型与被运算的变量的类型相同,所以可以赋值给b

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
马圣明 发表于 2013-11-3 23:38
A)byte b=1+1      正确:因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执 ...

谢谢,明白了!!万分感谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马