黑马程序员技术交流社区
标题:
数据类型自动转换问题
[打印本页]
作者:
yan
时间:
2013-8-2 14:36
标题:
数据类型自动转换问题
本帖最后由 杜光 于 2013-8-4 10:16 编辑
class Demo{
public static void main(String []args)
{
long x=9076L;
float y=0.8f;
y=x;
System.out.print(y);
}
}
我的问题是long是8字节 float是4字节,为什么long类型可以自动转换为flaot类型呢,一直不明白
作者:
yangchao8907
时间:
2013-8-2 14:54
自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。
转换规则
从存储范围小的类型到存储范围大的类型。
具体规则为:byte→short(char)→int→long→float→double
从long到float的自动转换是编译器完成的,但并不表示不损失精度。long 能自动转换为float,但这种转换会造成精度的丢失,float中只保留了原来long类型的低24位的数据。如果long类型的数据其二进制形式低于24位,则不会丢失精度;若大于24位,则会丢失精度。
作者:
手心里的温柔
时间:
2013-8-2 15:56
可以看一下float和long的最大范围
public class Test
{
public static void main(String[] args)
{
System.out.println(Float.MAX_VALUE);
System.out.println(Long.MAX_VALUE);
}
}
复制代码
float最大3.4028235E38
long最大9223372036854775807
float表示范围远大于long; long类型就可以隐式的转换为float
但float有效位有限,可能会有精度丢失
希望能帮到你 共同学习哈
作者:
诸隆隆
时间:
2013-8-2 16:43
整数型可以自动转成浮点型。byte→short(char)→int→long→float→double有这么一条规则的。
作者:
王希军
时间:
2013-8-2 16:52
至于为什么 这是java内部的规定, 需要我们记忆byte→short(char)→int→long→float→double
作者:
影响力147753321
时间:
2013-8-2 19:03
类型由“小”到“大”分别为 (byte,short,char)--int--long--float—double。这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。float—doube 可以表示到小数点后面的位置,当然表示值的范围就在一些,它们在一起运算时会自动转换成范围更大的。这样也更精确一些。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2