[英]Casting an int into a long
我有一个关于在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;
似乎一旦编译器因超出范围的问题而通知错误,它就会在那里阻塞而不检查程序员可能已经计划的任何可能的转换。
你对它有什么看法? 为什么有任何特殊原因?
提前致谢。
但是对于长型,它似乎是一个问题:
那是因为没有L
的12213213213
是一个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
是不能表示为int
。 因此,编译器没有获得有效值,以执行强制转换操作。
Java不会考虑您只对值进行的操作。 例如,如果您有一个太大的值,那么将它分配给double是没关系的,则将long值首先检查为有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.