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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan 中级黑马   /  2013-8-2 14:36  /  1338 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 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类型呢,一直不明白




评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

6 个回复

倒序浏览
自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。
转换规则
从存储范围小的类型到存储范围大的类型。
具体规则为:byte→short(char)→int→long→float→double

从long到float的自动转换是编译器完成的,但并不表示不损失精度。long 能自动转换为float,但这种转换会造成精度的丢失,float中只保留了原来long类型的低24位的数据。如果long类型的数据其二进制形式低于24位,则不会丢失精度;若大于24位,则会丢失精度。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
可以看一下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有效位有限,可能会有精度丢失

希望能帮到你  共同学习哈

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
整数型可以自动转成浮点型。byte→short(char)→int→long→float→double有这么一条规则的。
回复 使用道具 举报
至于为什么   这是java内部的规定,  需要我们记忆byte→short(char)→int→long→float→double
回复 使用道具 举报
类型由“小”到“大”分别为 (byte,short,char)--int--long--float—double。这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。float—doube  可以表示到小数点后面的位置,当然表示值的范围就在一些,它们在一起运算时会自动转换成范围更大的。这样也更精确一些。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马