黑马程序员技术交流社区

标题: 请教大大们 [打印本页]

作者: 15706025762    时间: 2015-8-28 21:36
标题: 请教大大们
clsaa Demo {
public static void main(String [ ] args){
byte  b1=3,b2=4,b;
b=b1+b2
b=3+4
}
}
请问那个编译失败。为什么
作者: 哈哈哈欠虫    时间: 2015-8-28 22:09
b=b1+b2;  这一句会编译出错,   b1和b2在相加时会自动转型了int型,b是byte型,所以会出错,应该改成b=(byte)(b1+b2),这样应该就没错了
作者: 15706025762    时间: 2015-8-28 22:34
哈哈哈欠虫 发表于 2015-8-28 22:09
b=b1+b2;  这一句会编译出错,   b1和b2在相加时会自动转型了int型,b是byte型,所以会出错,应该改成b=(by ...

不是定义了 b1和b2 是byte型 都是byte型的想加 应该不会提升吧  
作者: jeska    时间: 2015-8-28 22:42
b=b1+b2,两个byte相加得到int型
作者: kitboxer    时间: 2015-8-28 22:48
这个问题涉及到编译。你b=b1+b2这句是两个变量相加,变量在运行中可能会发生变化
作者: 三井寿    时间: 2015-8-28 22:52
哈哈,就喜欢你这种一本正经的来水分,但是我还是告诉你,这是隐性转型,比int小的那三种基本类型的数据在进行运算时,是自动提升类型提升至int型再进行运算。结果自然是int类型的,运算完成了你再把它赋值给一个byte类型的数据,然后这样会丢失精度,然后就报错了。
作者: 寰宇天侠    时间: 2015-8-28 22:54
这个是表达式类型的自动提升,在基本那本书的29页
另外33页提到,+=     *=     /=      -=这些会自动强制转换,不需另外声明,如
short s=1;
s+=1;
作者: cemabenteng    时间: 2015-8-28 22:56
b1+b2会编译失败,因为有类型的转换,常数相加会看结果是否在int范围内,如果在就不报错
作者: sunw    时间: 2015-8-28 23:08
运行一下就行了
作者: a348639336    时间: 2015-8-28 23:18
比inte字节小的在运算时都会自动提升为int型进行计算,所以b1+b2的结果是int型,要存给byte变量要加强转
数据类型的视频肯定没看仔细,再去看一遍吧
作者: 喵小莫    时间: 2015-8-28 23:29
byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加也是int类型
进行混合运算的时候,byte,short,char不会相互转换,都会自动提升为int类型
btye short char ->int - >long -> float ->double
作者: 15706025762    时间: 2015-8-29 09:41
谢谢 各位大大
作者: 哈哈哈欠虫    时间: 2015-8-29 19:46
15706025762 发表于 2015-8-28 22:34
不是定义了 b1和b2 是byte型 都是byte型的想加 应该不会提升吧

会自动提升为int型的




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