为了账号安全,请及时绑定邮箱和手机立即绑定

为什么float赋值要加f,double不用呢? 不都是小数吗 只不过精度不同

为什么float赋值要加f,double不用呢?  不都是小数吗 只不过精度不同

正在回答

2 回答

JAVA是一种强类型语言,你在做赋值运算的时候其实等号两边的类型都是确定的,能赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现),要么编译器通过上下文可以判定。比如:

byte x = 1;

1是个整数字面量,是int类型,这个值在byte类型的范围之内,这个时候编译器会帮你做类型转换,只留下int类型8位,前面的0都去掉。
而在JAVA中浮点类型的字面量类型默认是double,但是由于float类型和double类型在内存中的二进制表现形式不同:一个8位;一个4位。编译器在编译的时候扫描到了一个25.6,在不带F的情况下,它会判断这是double类型,应该创建一个8个字节的空间来存放;带上F,编译器就会创建一个4字节的空间来存放。float不能像整形那样有时会默认转换,必须要确定类型,带上F。

0 回复 有任何疑惑可以回复我~
#1

jackrabbit 提问者

理解了,谢谢。
2016-03-13 回复 有任何疑惑可以回复我~

不同之处有四处:

单精度浮点数(float)与双精度浮点数(double)的区别如下:

(1)在内存中占有的字节数不同

单精度浮点数在机内占4个字节

双精度浮点数在机内占8个字节

(2)有效数字位数不同

单精度浮点数有效数字8位

双精度浮点数有效数字16位

(3)所能表示数的范围不同

单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38

双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308

(4)在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

至于要加F是因为就是这么规定的……如果不加F的话他会认为你是用的Double型……

1 回复 有任何疑惑可以回复我~
#1

jackrabbit 提问者

也就是说我定义float类型 但是在数据后面没有添加F 系统会自动判断为double型吗? 有点不懂 C里面float是自动转化成double的,所以一直认为float和double一样
2016-03-13 回复 有任何疑惑可以回复我~
#2

qq_緐華丗堺沁透誐白勺錑眸_0 回复 jackrabbit 提问者

同 问
2016-03-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么float赋值要加f,double不用呢? 不都是小数吗 只不过精度不同

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信