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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯伟 中级黑马   /  2012-9-21 21:36  /  1445 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sclsfw 于 2012-9-22 15:12 编辑

byte b=4;//编译通过
float f=4.0;//编译失败
整型默认是int,浮点型默认是double,毕老师说4是个整数常量,是固定的,赋值时会先判断是否在byte范围内再赋值,那么4.0也是个浮点常量,同样是固定的,在float范围内,为什么double型的4.0赋给float要加f做强制转换,而int型的4赋给byte却不用强制转换

2 个回复

倒序浏览
byte是8位二进制表示,是单字节,存储范围是-128~127。
因为4在存储范围内,转换没问题,编译通过。
如果 byte b = 500; 这样就编译失败,因为byte不能存储这么大的整形,隐私转换失败。

对于float f = 4.0; 因为精度问题,double的精度大,转成float类型是会损失精度,需显示转换。
回复 使用道具 举报
byte b =4在以上声明中,整数4从int类型隐式转换为 byte 类型。如果整数超出了byte类型的范围128到127,则将发生编译错误。
float a=4.0这样写会出错,double数据转换为float数据要丢失精度,所以float型变量强制后面用f结尾,
double a=4.0;这样就不会有错,不过性能方面可能会差一些.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马