Java 将int转换为long
关于java中从int到long的转换,我有一个问题。 为什么浮动没有问题:Java 将int转换为long,java,int,long-integer,Java,Int,Long Integer,关于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)1221321
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;
似乎一旦编译器由于超出范围的问题通知错误,它就会在那里阻塞,而不检查程序员可能计划的任何可能的强制转换
你对此有什么看法?为什么会有特殊的原因呢
提前谢谢
但对于长型而言,这似乎是一个问题:
long l = (long)12213213213;
//with L or l at the end it will work though.
long l = (long)12213213213L;
这是因为没有L的12213213
是int
,而不是long
。由于该值超出了int
的范围,因此会出现错误
尝试以下方法:-
System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);
你会更好地理解的
就浮动
的情况而言:-
float f = (float)45.45;
值45.45
是一个double
值,适合double
的大小。因此,编译器在这方面不会有问题,然后它将执行cast
到float
似乎一旦编译器通知由于超出范围而导致的错误
在没有检查任何可能的铸造的情况下,在那里发行它
程序员可能已经计划好了
没错。编译器首先检查有效值,这里是int
,只有这样它才能通过强制转换操作进一步移动
因此,基本上在long
和int
的情况下:-
long l = (long)12213213213;
您不会因为
cast
操作而出错,而是因为您的数值文本
不能表示为int
。所以,编译器没有得到有效的值,来执行一个强制转换操作。 < P> java不考虑你所做的只是一个值。例如,如果您有一个太大的长值,那么将其指定给double并不重要,长值首先被检查为有效。我理解这一点,但是我的问题旨在理解为什么铸造(长)12213213;在这种情况下不考虑,而在浮点f=(浮点)45.45;(请注意,如果不进行强制转换,则会出现错误)正常工作。@Rollerball。。错误不是因为铸造。编译器没有机会到达那里。只有当注意到12213213
时,它才会停止,并说,嘿,等等,这个数字不能表示为int
。所以,它给了你一个错误。这是由一个事实暗示的,一个末尾没有L
的数字是int
。所以,4
是一个int
,但是4L
是一个long
。@每个人都在读这篇评论。我完全理解错误的原因。但是,有人知道为什么编译器在没有检查强制转换的情况下就停在那里吗?考虑到如果编译器看到了强制转换,它就会工作。@Rolleball。。好的,我们就这样吧。要将值强制转换为类型,编译器首先需要一个有效值。然后,只有它可以检查该值是否可强制转换为该类型。现在,由于它甚至没有得到int literal
的有效值,它将如何进一步使用强制转换?这可能会有所帮助