黑马程序员技术交流社区

标题: 哪句是编译失败的?为什么? [打印本页]

作者: 梦想起航    时间: 2015-7-10 20:41
标题: 哪句是编译失败的?为什么?
        byte b1 = 3, b2 = 4, b;
        b=b1+b2;
        b=3+4;
作者: 孟卫严    时间: 2015-7-10 21:08
第二句
  1. b=b1+b2;
复制代码

因为b1是byte型,b2是byte型
b1+b2默认会自动强转成int型
而赋值给b的时候,b为byte型
所以会编译失败!
作者: 为明天而奋斗    时间: 2015-7-10 21:17
b=b1+b2,编译器会自动将b1和b2自动提升为int型的,而b是byte的,所以会报错;而b=3+4,是一个赋值语句,b是byte型的,3+4=7属于byte数值类,所以b=3+7是没问题的
作者: 曲终烟尽    时间: 2015-7-10 21:19
b=3+4
肯定错。
3和4是 int类型 相加后得到 int类型的 7
把int类型赋值给一个byte肯定错。
上边的是对的。
作者: ZhangHeng    时间: 2015-7-10 21:22
二楼说错了,第2句都没错,2边都是byte型,是可以赋值的。

b=3+4;
这句话是错的,b是byte型,3和4默认为int型,int型不能赋值给byte型的b。
作者: 曲终烟尽    时间: 2015-7-10 21:34
本帖最后由 曲终烟尽 于 2015-7-10 21:51 编辑

b=b1+b2;编译失败
错误: 不兼容的类型: 从int转换到byte可能会有损失
我思考了一下,编译失败是因为右侧两个byte相加,其值将大于一个byte所能表达的最大值,所以会自动将右侧的和升级为一个int,而左侧还是byte,就会造成把int赋值给byte的错误。

b=3+4;可以通过
但是如果右侧值大于127就会自动升级为int类型。


作者: 搁浅丶那份    时间: 2015-7-10 21:48
  b=b1+b2;报错,Java做运算会默认转换为int型




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