黑马程序员技术交流社区

标题: 求大神告诉我这对错的原因,对错我知道,但是原因啊!不明白啊! [打印本页]

作者: 殷挥笔    时间: 2013-11-3 22:50
标题: 求大神告诉我这对错的原因,对错我知道,但是原因啊!不明白啊!
以下代码哪个是正确的?为什么?

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;       对
作者: Cola    时间: 2013-11-3 23:08
b中错的原因是b=b+1,1是int类型,b是byte类型,无法将int隐式转换为byte。
作者: 剑魂    时间: 2013-11-3 23:29
又是这个问题,byte在运算中自动提升为Int型,b+1为int了,再赋给byte时丢失精度,而byte b =1 +1 , 赋值中会判断1+1结果2在byte范围内自动转换,

byte b += 1,+=是赋值运算符,b在两边加1,再判断在byte范围内自动转换成byte型,++b是b自动自增,先生成值再执行赋值运算。
作者: 马圣明    时间: 2013-11-3 23:38
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
作者: 殷挥笔    时间: 2013-11-4 00:12
马圣明 发表于 2013-11-3 23:38
A)byte b=1+1      正确:因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执 ...

谢谢,明白了!!万分感谢!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2