黑马程序员技术交流社区

标题: 数据类型自动转换问题 [打印本页]

作者: 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的最大范围
  1. public class Test
  2. {
  3.         public static void main(String[] args)
  4.         {              
  5.                         System.out.println(Float.MAX_VALUE);
  6.                         System.out.println(Long.MAX_VALUE);
  7.         }
  8. }
复制代码
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