将int转换为long

Rol*_*all 3 java int long-integer

我有一个关于在java中从int转换为long的问题.为什么浮标没有问题:

float f = (float)45.45;//compiles no issue.
float f = 45.45f; //compiles no issue.
Run Code Online (Sandbox Code Playgroud)

但是对于长型,它似乎是一个问题:

    long l = (long)12213213213;
    //with L or l at the end it will work though. 
    long l = (long)12213213213L;
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢.

Roh*_*ain 8

但是对于长型,它似乎是一个问题:

那是因为12213213213没有Lint,而不是long.由于该值超出了该范围int,因此您会收到错误.

尝试类似的东西: -

System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);
Run Code Online (Sandbox Code Playgroud)

你会明白的.

就案件float而言: -

float f = (float)45.45;
Run Code Online (Sandbox Code Playgroud)

45.45是一个double值,适合的大小double.因此,编译器将没有问题,然后它将执行一个castto float.

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

究竟.编译器首先检查有效值,这里int,只有它可以进一步使用强制转换操作.

所以,基本上是在longint: -

long l = (long)12213213213;
Run Code Online (Sandbox Code Playgroud)

你没有因为cast操作而得到错误,而是因为你numeric literal不能代表int.因此,编译器没有获得有效值,以执行强制转换操作.