黑马程序员技术交流社区

标题: 面试题 [打印本页]

作者: 阳光下的枫叶    时间: 2015-12-12 00:29
标题: 面试题
面试题 B:

    * byte b = 10;

    * b++;

    * b = b + 1;

    * 问哪句会报错,为什么

作者: Mr.zhao    时间: 2015-12-12 10:59
b = b + 1;报错,byte参加运算会提升为int重新赋值报错,b++含有隐式的强制转换不会报错
作者: duluhuang    时间: 2015-12-12 11:27
当然是第三句拉
作者: ninety_奶挺    时间: 2015-12-12 19:31
b = b + 1;会报错,因为计算b+1时会自动将b从byte提升为int,其计算结果还是int型,将int型的结果赋值给byte型肯定会提示可能会损失精度。而b++;相当于b=(byte)(b+1);其隐含了一个强制类型转换,所以没有问题。
作者: Jerson_ZF    时间: 2015-12-12 20:01
b = b+1会报错。因为1是int类型的,会将表达式值提升为int类型,而b本身是byte类型,会出现类型转换错误
作者: zhangdazhi186    时间: 2015-12-12 20:01
楼上都写的挺清楚的
作者: 王晓亮    时间: 2015-12-12 20:34
!!!!!!
作者: Rocky_zhang    时间: 2015-12-12 20:55
高手在民间
作者: hyl    时间: 2015-12-12 21:27
b=b+1,会报错。因为b+1会自动类型提升为int型,但b为byte类型,会超出范围。
而b++,实际是b=(byte)(b+1)内部包含了强制类型转换。
作者: 18045621320    时间: 2015-12-12 21:40
厉害
作者: lvhongli    时间: 2015-12-12 21:56
最后一句啊  
作者: songjianzaina    时间: 2015-12-12 22:01
楼上讲得很清楚
作者: 我住隔壁我姓王    时间: 2015-12-12 22:12
当然是b = b + 1了
作者: a54267490    时间: 2015-12-12 22:19
小类型的可以直接赋值给大类型的,反过来就不行
作者: LSD-ZWH    时间: 2015-12-12 22:22
路过,过来瞅瞅,第三行错了!
作者: 唐洪超    时间: 2015-12-13 00:04
b=b+1报错。编译时,因改写成b=b++
作者: zcbcba123    时间: 2015-12-13 00:13
第三句,
作者: hrfhwy    时间: 2015-12-13 20:05
最后一句,因为1是int型,b被提升了
作者: xiaobei56    时间: 2015-12-13 20:32
当出现 byte  short int整数类型的变量时,java默认是 int类型(即:byte类型的变量,放在等号后面,java由于不知道你的变量值是多少,会默认为int类型)
当出现 float double浮点类型变量的时候,java默认是double类型
作者: kellysunny    时间: 2015-12-13 20:44
高手,学习了
作者: jacklove    时间: 2015-12-13 21:02
第三句 会报错 . 因为byte 和 int(也就是数字1啦)做运算时 , 会自动提升为Int类型
作者: 牛德阳    时间: 2015-12-13 22:38
最后一句啊
作者: 队长别开枪是我    时间: 2015-12-13 23:42
最后一句会报错,需要int,找到byte,第二句++是一个运算符,不会发生类型转换,第三句因为java的常量优化机制会把右边的自动提升为int类型,所以会报错.




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