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

关于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;
似乎一旦编译器由于超出范围的问题通知错误,它就会在那里阻塞,而不检查程序员可能计划的任何可能的强制转换

你对此有什么看法?为什么会有特殊的原因呢

提前谢谢

但对于长型而言,这似乎是一个问题:

    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
的有效值,它将如何进一步使用强制转换?这可能会有所帮助