float型赋值的时候为什么要加”F“?

AricGuo 2015-11-16 10:33:23
byte x=1;
long y=222222222L;
在赋值整数类型的时候,字面默认整数为int型,int型范围小于long,大于byte,所以在赋值 byte 的时候不需要加“B”(暂且认为有B这个概念),而赋值long的时候需要加“L”才能让编译器认出大于int范围的常量然后赋于y。

float z=1.2L;
但在float与double中,代码上字面常量默认是double型的,而且double的范围是大于float的,足以证明double中可以接受float的范围,1.2的精度在float中也肯定不会被降低的,为什么在赋值的时候还要加“F“??????是IEEE二进制浮点数算术标准的内部运算规则产生的这个问题吗?
...全文
465 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Damon-Da 2015-11-17
标准规范,左右都是同一类型,并不要转换类型,防止不必要的 错误
回复
AricGuo 2015-11-17
引用 4 楼 lonrence 的回复:
这还要说java是种强类型语言,你在做赋值运算的时候其实等号两边的类型都是确定的,能赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现),要么编译器通过上下文可以判定,比如, byte x = 1;1是个整数字面量,是int类型,这个值在byte类型的范围之内,这个时候编译器会帮你做类型转换,只留下int类型8位,前面的0都去掉。 浮点类型的字面量类型默认是double,但是由于float类型和double类型在内存中的二进制表现形式不同,不能像整形那样有时会默认转换,必须要确定类型,带上f
懂了 谢谢 因为是小白 所以不明白编译和运行时候的道理 编译时候虚拟机是需要认识我们所敲的数字的 然后最后执行class文件的时候才向左边赋值进行操作。所以编译通不过是因为它对你的数字用它默认的方式做不了准确的判断。byte等类型 在Int范围内 所以虚拟机是认的出来的 但float的运算机制double也是认不出详细的 所以需要加F 能这样理解把?
回复
这还要说java是种强类型语言,你在做赋值运算的时候其实等号两边的类型都是确定的,能赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现),要么编译器通过上下文可以判定,比如, byte x = 1;1是个整数字面量,是int类型,这个值在byte类型的范围之内,这个时候编译器会帮你做类型转换,只留下int类型8位,前面的0都去掉。 浮点类型的字面量类型默认是double,但是由于float类型和double类型在内存中的二进制表现形式不同,不能像整形那样有时会默认转换,必须要确定类型,带上f
回复
这是规范,因为你不加F jvm会默认是double类型的,有时候就会造成数据的损失
回复
injuer 2015-11-16
告诉cpu计算的时候内存模型不一样。
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2015-11-16 10:33
社区公告
暂无公告