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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么下面这两行可以编译
  1. byte a = (short)1;
  2. byte b = (int)1;
复制代码
但是下面这些却不行?
  1. byte c = (long)1;
  2. float d = 1.1;
复制代码
同样是字节比byte的多,为什么short和int可以,long不可以?

第二句视频老师说了要写成float d =1.1F      ,1.1没有超过float的范围为什么不会像整数一样自动识别?
谢谢指教

4 个回复

倒序浏览
补充补充,为什么上面那样写,short 和 int 会自动转成byte,而byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2;会出错,就不能自动转换呢??
回复 使用道具 举报
后面的加强制转换的标志啊 就不报错了
回复 使用道具 举报
belowfox 发表于 2016-7-20 15:41
补充补充,为什么上面那样写,short 和 int 会自动转成byte,而byte b1 = 3; byte b2 = 4; byte b3 = b1 +  ...

      在做运算的时候,byte/short/char会自动升级int类型,所以b1+b2做运算的时候已经是int类型的,而int类型的是无法自动转换成byte类型的,因此byte b3 = b1 + b2的运算会报错。需要添加强制转换byte b3 =(byte)( b1 + b2)即可。
     置于byte a =(int)1;为什么能够赋值成功就不太清楚了,最好不要做这样的强制转换,类型不一样,从大到小做强制转换会损失精度。
     我个人认为可能是因为所需要强制转换的数据恰好是在byte的取值范围,并且整数默认为int类型的,所以当数值取值范围在-128~127之间,用int对于byte数据做从大到小的强制转换就不会报错。但是对于long来说,就可能会报错损失精度了。
回复 使用道具 举报
格式有问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马