为什么short i = 10;
没有错而float a = 1.0;却有错。
(不要回答我将1.0改成1.0F)整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
如果是这样的话,那为什么
short i = 10;没有错,10不应该是int类型的么?
如果说10没有超过short的范围,所以可以这么做,那为什么float a = 1.0;又有错了?1.0也没有超过float的范围啊?
为什么1/ 0有错而1 / 0.0没有错?得到的是无穷。
这不都是0么。谢谢回答。!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【joejoe1991】截止到2008-07-14 12:51:16的历史汇总数据(不包括此帖):
    发帖的总数量:230                      发帖的总分数:6512                     每贴平均分数:28                       
    回帖的总数量:1782                     得分贴总数量:881                      回帖的得分率:49%                      
    结贴的总数量:183                      结贴的总分数:5690                     
    无满意结贴数:4                        无满意结贴分:130                      
    未结的帖子数:47                       未结的总分数:822                      
    结贴的百分比:79.57 %               结分的百分比:87.38 %                  
    无满意结贴率:2.19  %               无满意结分率:2.28  %                  
    楼主加油
      

  2.   

    因为没有 short 型的常量,所以可以用int 常量对 byte 或 short 的变量赋值。   
      

  3.   

    见:http://java.sun.com/j2se/1.4.2/docs/api/constant-values.html关于POSITIVE_INFINITY的定义:public static final double  POSITIVE_INFINITY  1d/0d
    public static final float  POSITIVE_INFINITY  1f/0fLZ明白了吧。
      

  4.   


    float的结尾要加f的,为的是和double区别,Java就是这样规定的。
      

  5.   

    应该这么说,JAVA对于整数的处理和对于浮点数的处理不同。对于浮点数而言,所有的浮点数默认为double进行处理。应该是因为浮点数有单精度和双精度的区别,所以不会自动转换类型。
    例如:float m=1.0;//它会提示:Type mismatch: cannot convert from double to float
    float m=1.0f;//这个显示指定了使用单精度,当然没问题。对于整数而言,它默认的确是int类型,但是如果没有超出当前类型大小则会默认进行转换。
    我们从下面可以看出默认的是int类型。
    对于long
    long mm=9999999999;//The literal 9999999999of type int is out of range 
    这里对于Int来说是超出范围了
    long mm=9999999999L// 这个却没有错误,说明默认就是Int类型的。
    byte m=1;//没有问题吧,根据当前是byte来处理。
    byte m=444;//明显就会提示:Type mismatch: cannot convert from int to byte可见范围超出之后它默认使用Int来处理了。short m=1;//没问题
    short m=1111111111;//Type mismatch: cannot convert from int to short
      

  6.   

    楼上的说得很对,我来补充几句:
    类型        存储需求       取值范围
    float     4字节          大约(+/-)3.402 823 47E + 38F(有效位数为6~7位)
    double    8字节          大约(+/-)1.797 693 134 862 315 70E + 308(有效位数为15位)    double表示这种类型的数值精度是float的两倍(有人称之为双精度)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足要求。例如,用7位有效数字足以精确表示普通雇员的年薪,但表示公司总裁的年薪可能就不够用了。实际上,只有很少的情况适合使用float类型,例如,需要快速的处理单精度数据,或者需要存储大量数据。    float类型的数值有一个后缀F(例如,3.402F)。没有后缀F的浮点数值(如3.402)默认为double类型。当然,也可以在浮点数值后面添加后缀D(例如,3.402D)。
      

  7.   

    默认的带小数点的数都是double型
      

  8.   

    short a = 10;
    int b = 10;float c = 1.0f;
    double d = 1.0;我想是不是java的规则就是这样,float,double需要区分。double 是默认 float就要加 f但是为什么int short 不用这么做,也是规定吧。为什么这么定,还请高手指导,或是 我理解的不对。哈哈
      

  9.   

    1/0.0,除数的0.0在计算时并不是零,它是有精度的,这个数<<<1,得到当然是无穷啊
      

  10.   

    整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
      

  11.   

    为什么 1 / 0 有错而 1 / 0.0 没有错?得到的是无穷。这不都是 0 么。
    注意:0.0 是 double 类型常量,0 是 int 类型常量,1 / 0.0 要首先将 1 自动类型转换到 1.0 再完成浮点数相除计算结果自然是 double 类型的,而 double 类型变量按 IEEE754 标准可以取到三个特殊值即 NaN 正无穷 负无穷,所有可以。而 1 / 0 因为两边都是 int 型常量,所以是整除,而整除结果当然是 int 型整数,int 型变量无法表示和存储无穷这个特殊值,当然不可以,运行到这儿会抛 ArithmeticException 运行时异常。
      

  12.   

    float加f是为了和double类型区别的   short本来就属于整型,也没超出short的范围,所以它肯定不会报错了!
      

  13.   

    java运算有个规律就是非浮点的都是以int运算
    浮点都是以double运算
      

  14.   

    short 这个是编译器干的。因为你用的是常量,所以编译时没有问题。
    如果你输入的数字大于short的最大数,则编译会出问题。而整数的转换是从 int 想 long ,所以一般没问题。
    而浮点的转换是从 double 向 float ,所以出现了问题。
      

  15.   

    这是Java语法所定,并不需要考虑为什么。这就像说中国话要用主谓宾排列,为什么?————没有为什么
    这一点跟学外语很相像,不需要问为什么。
      

  16.   

    试着回答一下,简言之,对于int,short,byte的1,它们是兼容的 适用于自动转换(无代价) 
    而对于double float的1.0两者是不直接兼容的 不适用于自动转换(会损失精度)
    why?int转为short,byte只要将高位的0截断
    而float 32位保存 SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM 其中S是符号位 E是指数位 M是有效精度位 
    类比于double 52位精度 The "float" class takes 4 bytes of storage, and have 23 binary digits of precision. The "double" class takes 8 bytes of storage, and have 52 binary digits of precision. 
      

  17.   

    一直将就,看来还是楼主精明啊
      25楼答案漂亮
      学习ing