黑马程序员技术交流社区

标题: 在看自学教程,关于变量类型的一点小疑问 [打印本页]

作者: belowfox    时间: 2016-7-20 14:55
标题: 在看自学教程,关于变量类型的一点小疑问
为什么下面这两行可以编译
  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的范围为什么不会像整数一样自动识别?
谢谢指教

作者: belowfox    时间: 2016-7-20 15:41
补充补充,为什么上面那样写,short 和 int 会自动转成byte,而byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2;会出错,就不能自动转换呢??
作者: zhoubo    时间: 2016-7-20 17:57
后面的加强制转换的标志啊 就不报错了
作者: 15105106710    时间: 2016-7-20 22:57
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来说,就可能会报错损失精度了。

作者: 花塔塔    时间: 2016-7-21 09:51
格式有问题




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