将int转换为long

时间:2013-01-31 18:45:23

标签: 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)12213213213L;

似乎一旦编译器因为超出范围的问题而通知错误,它就会阻塞,而不会检查程序员可能已经计划过的任何可能的转换。

你对此有何看法?为什么有任何特殊原因?

提前致谢。

2 个答案:

答案 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的大小。因此,编译器将没有问题,然后它将执行doublecast

  

一旦编译器因超出范围而通知错误   发出它阻止那里,而不检查任何可能的铸造   程序员可能已经计划好了。

完全。编译器首先检查一个有效值,这里是float,然后才能通过强制转换操作进一步移动。

所以,基本上是intlong: -

int

由于long l = (long)12213213213; 操作,您没有收到错误,而是因为cast无法表示为numeric literal。因此,编译器没有获得有效值,以执行强制转换操作。

答案 1 :(得分:4)

Java不会考虑您对值的处理方式。例如,如果您有一个太大的值,那么将它分配给double是没关系的,那么long值会先被检查为有效值。