黑马程序员技术交流社区

标题: 关于类型转换的问题 [打印本页]

作者: jing迪    时间: 2013-11-17 12:33
标题: 关于类型转换的问题
为啥byte b = 5;就能编译通过
但是float f = 1.0就报错了??

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

作者: 零下五度的水    时间: 2013-11-17 12:58
float不是强转的问题,而是你要加一个标识符:1.0f
这个就像16进制是 0x 开头一样,是在底层定义的,
貌似所有的编程语言都这样
作者: 陈文杰    时间: 2013-11-17 13:14
要知道byte a = 5;的5其实不是int, 它其实是int literal。在这个时候编译器会自动把5变成byte,因为5是直接赋值到a的,所以编译器知道5应该是byte,详细请对编译器认知深刻大牛来解说,我了解有这么回事。
1.0默认是double,缩小类型需要强制转换。注意类型强制转换规则。
作者: 段光宇    时间: 2013-11-17 13:29
1.byte b=5;
这里5为int类型,把它赋给byte对象b时,系统底层会默认把5这个int类型转为byte类型,所以正确
2.float f = 1.0
1.0为浮点数,一个浮点数没有后缀F,则默认为double型,把double型赋给float型,相当于把精度高的型转为精度低的型,错误
作者: 黄炳期    时间: 2013-11-17 14:40
帖子已分类
认真总结吸收解答,收获大大滴~




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