1。java中,long型是64位的,float型是32位的。为什么long型转float型,编译器没有报“possible loss of precision”这个错误呢?(比如float a = 100L;)网上有人说是因为float型虽然是32位的,可是其中有部分表整数,其他表指数,在表指数的位的影响下,float型的范围当然就比较容易变大(实际float表示的范围确实比long大)。然后就因为范围大,所以编译器就隐式转换了???可是在《SCJP考试指南》中,看见作者说“变量其实是容器,容器中有n个位(n即为该基本类型的位数)”,那么32位的float容器又怎么容得下64位的long数据呢???两种说法好像都有道理啊那么,基本类型赋值中可能涉及到的强制或隐式类型转换的场景中,判断的关键在哪里?是根据“范围说”还是根据“容器说”?2。还有long是8字节的,那么为什么给long a = 9223372036854775807(2^63-1),会报“过大的整数”这个错?事实上,赋
2147483647(2^31-1)才刚刚好,哪怕再大1,就报这个错了,为什么呢?那这个8字节岂不是只用了4字节?
2147483647(2^31-1)才刚刚好,哪怕再大1,就报这个错了,为什么呢?那这个8字节岂不是只用了4字节?
float f1 = 2000000000;
float f2 = 2000000050;
后者比前者看起来大50,但实际表示效果如何呢?可以测试一下。
(看起来是两个数,但映射到float,可能是一样大的。)
估计大二或者大三会开计算机组成原理之类的课程,到时候就都明白了。2.还有负数呢。
你用它的构造方法不就行了吗。因为你long a = 9223372036854775807的右边是等于把一个int型的值赋值给了long把以肯定会出现out of range的错误吗