本帖最后由 abbot123 于 2010-01-27 11:03:58 编辑

解决方案 »

  1.   

    你的问题:可是,当要转换的double类型的数值大于int的取值范围,也就是大于2147483647时, 
    转换后的数总是2147483647,这是为什么呢? 
    当你使用强制转换的时候即更改变量的类型,而变量类型有整型,实型,字节,字符,布尔这几种,强制类型换中double转int时,内存空间也跟着变,即double(内存中占8个字节)转int(内存中占4个字节)后,Int在内存中的数值范围:2147483647~-2147483648,Double数值范围:1.797693e+308~4.900000e-324
    你强制类型换中double转int时,类型变为Int了,当然存值范围也变更,你的数字大了,内存空间只有那么一点,所以只能存内存空间的最大值,其他的溢出了
    回去看书吧,这么基础的解释也废劲,就相当于1+2为何等于3,因为1+2中的2等同于1+1,所以1+2=1+1+1=3
    不知道你楼主你明白了没有 
      

  2.   

    整型和浮点型的数字存储布局不一样的
    整型是1符号位,后面数字位,所以long转int就取模,就是后32位
    浮点型的double是1符号位11指数位52小数位以及1023偏移附加,
    虽然和long同样占64位,但是存储方式完全不一样,转int时不是取模的
      

  3.   

    哎。
    楼主,如果你只能一次吃1kg食物,我给你1吨,你说你这次是吃1kg呢,还是1吨?
      

  4.   

    这就是规定吧,从来没考虑过这个问题。
    有一点要知道,基本类型的转换,在编译器处理后会变成一串指令。这一串指令会从原来的值运算得到转换后的值。这和引用类型的“转换”是不同的。
    楼主的发现,应该就体现了Java编译器是如何处理基本类型转换的吧。
      

  5.   

    提示:
    英文教材中,基本类型(如从double到int)的转换,叫做Type Conversion;引用类型的“转换”,叫做Class Casting。用词完全不同,体会一下这里的差别吧。
    不知道哪位高人,把两者混为一谈然后教育别人。居然还流行了起来。
      

  6.   

    int 和double存在空间大小不一致
      

  7.   

    这跟怎么存储没啥关系 关键是java语言设计让你这样做
    它同样可以设计成转换溢出时变成负的 变成0 或者干脆报错
      

  8.   

    为什么long转int时,会把超出4个字节的部分砍掉,而double转int时确总是2147483467呢?
    这个我也不懂为什么,还是要看原理的书...