我有一个关于在java中从int转换为long的问题。 为什么浮标没有问题:
float f = (float)45.45;//compiles no issue.
float f = 45.45f; //compiles no issue.
然而对于长型而言似乎是一个问题:
long l = (long)12213213213;
//with L or l at the end it will work though.
long l = (long)12213213213L;
似乎一旦编译器因为超出范围的问题而通知错误,它就会阻塞,而不会检查程序员可能已经计划过的任何可能的转换。
你对此有何看法?为什么有任何特殊原因?
提前致谢。
答案 0 :(得分:8)
然而对于长型而言似乎是一个问题:
这是因为没有12213213213
的{{1}}是L
,而不是int
。由于该值超出long
的范围,因此您会收到错误。
尝试类似: -
int
你会更好理解。
就System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);
的情况而言: -
float
值float f = (float)45.45;
是45.45
值,符合double
的大小。因此,编译器将没有问题,然后它将执行double
到cast
。
一旦编译器因超出范围而通知错误 发出它阻止那里,而不检查任何可能的铸造 程序员可能已经计划好了。
完全。编译器首先检查一个有效值,这里是float
,然后才能通过强制转换操作进一步移动。
所以,基本上是int
和long
: -
int
由于long l = (long)12213213213;
操作,您没有收到错误,而是因为cast
无法表示为numeric literal
。因此,编译器没有获得有效值,以执行强制转换操作。
答案 1 :(得分:4)
Java不会考虑您对值的处理方式。例如,如果您有一个太大的值,那么将它分配给double是没关系的,那么long值会先被检查为有效值。