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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15706025762 中级黑马   /  2015-8-28 21:36  /  460 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

clsaa Demo {
public static void main(String [ ] args){
byte  b1=3,b2=4,b;
b=b1+b2
b=3+4
}
}
请问那个编译失败。为什么

12 个回复

倒序浏览
b=b1+b2;  这一句会编译出错,   b1和b2在相加时会自动转型了int型,b是byte型,所以会出错,应该改成b=(byte)(b1+b2),这样应该就没错了
回复 使用道具 举报
哈哈哈欠虫 发表于 2015-8-28 22:09
b=b1+b2;  这一句会编译出错,   b1和b2在相加时会自动转型了int型,b是byte型,所以会出错,应该改成b=(by ...

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

会自动提升为int型的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马