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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© date1130 高级黑马   /  2014-10-30 22:29  /  2020 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
一直没有搞明白这道题,
第二个是强制类型转换,那第一句是什么意思呢?有什么区别?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

3 个回复

倒序浏览
这个问题我理解的也不够透彻,简单说下我的理解。
你可以打开eclipse,将一下几句代码输入,编译器会帮助你。
                int i = 12.345f;// 会提示不能将float转成int, 12.345f形式为float类型。
                float f = 12.345;// 会提示不能将double转成float,12.345为double。
                float f1 = 12.345f;// float的正常书写格式。
                // 此为double类型的两种书写格式。
                double d1 = 12.345;
                double d2 = 12.345d;
主要的原因,是因为这几种类型,所占用的字节数不同。
回复 使用道具 举报
这种有小数点的值默认是储存为Double型。就如同x=x+1中的1默认是int型一样。在后面加上f是为了提醒编译器这是个float,储存的时候就是按float进行存储。而前面加folat是将后面强制转换成float。也就是存储时是doule,给前面赋值的时候才会进行强制转换。这其中是否有编译器的优化就不得而知了。
这样看你就知道区别了
float f1 = 12f;//这个12就是float的类型。会按12.0来存储
float f2 = (float)12;/这个12是int的类型。(默认类型)。
上面跟这个原理是一样的

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 很给力!

查看全部评分

回复 使用道具 举报
neokevin 来自手机 初级黑马 2014-10-31 11:44:13
板凳
12.345默认是double类型的,所以第二句是说将double类型的数据强制类型转换为float,第一句在最后加上f就是表示12.345是float的,不会进行类型转换。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马