java的类型转换问题

请问一下,在java中,long的大小是8字节,float的大小是4字节,8字节的long怎么就可以隐式的转换为4字节float的呢?

这都说了些什么!

这不误人子弟嘛

兄弟,是这个样子的:由于浮点数的存储机制与定点不同,使得它能表示的数的范围大大扩展了,举个例子 [code="java"]float i=2345000000000L;[/code]

对这个数而言,4字节的int类型是指定存不下的,但是单精度浮点数是可以的。纵使是单精度,它也是浮点数,可表示数的范围-2^127~2^127折合十进制-1.7*10^38~1.7*10^38 , 瘦死的骆驼比马大。 long 可表示的数的范围还不足10^20,那你说可不可以自动转型 ?!

为什么同样是四个字节,float这么厉害? 那还要long干什么 ?

切记:使用浮点型的时候,要注意它的“有效数字”(强调一下),单精度为7位,7位以后的皆不可信了。 它牺牲的是 有效数字的位数!数的范围是足够了

这是java中的机制呀,“向上转型”,java中最大的对象是object,那么肯定object可以转成所有的对象。也可以说兼容所有的对象!

要是穷根问底的话就好比是1+1=2 Why?

这个java类型转换,向上转是自动档,位数不够自动补0