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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jing迪 高级黑马   /  2013-11-17 12:33  /  904 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为啥byte b = 5;就能编译通过
但是float f = 1.0就报错了??

知道1.0默认double类型  但是5就能自动强转为byte 因为没有超过byte所表示范围
那么1.0为啥不能自动强转为float   1.0也没有超过float表示范围呀

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

4 个回复

正序浏览
帖子已分类
认真总结吸收解答,收获大大滴~
回复 使用道具 举报
1.byte b=5;
这里5为int类型,把它赋给byte对象b时,系统底层会默认把5这个int类型转为byte类型,所以正确
2.float f = 1.0
1.0为浮点数,一个浮点数没有后缀F,则默认为double型,把double型赋给float型,相当于把精度高的型转为精度低的型,错误
回复 使用道具 举报
要知道byte a = 5;的5其实不是int, 它其实是int literal。在这个时候编译器会自动把5变成byte,因为5是直接赋值到a的,所以编译器知道5应该是byte,详细请对编译器认知深刻大牛来解说,我了解有这么回事。
1.0默认是double,缩小类型需要强制转换。注意类型强制转换规则。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
float不是强转的问题,而是你要加一个标识符:1.0f
这个就像16进制是 0x 开头一样,是在底层定义的,
貌似所有的编程语言都这样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马