繁体   English   中英

将int转换为long

[英]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;

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

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

提前致谢。

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

那是因为没有L12213213213是一个int ,并且不long 由于该值超出了int的范围,因此您会收到错误。

尝试类似的东西: -

System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);

你会明白的。

float的情况而言: -

float f = (float)45.45;

45.45是一个double值,适合double的大小。 因此,编译器将没有这一问题,然后它会执行一个castfloat

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

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

所以,基本上在longint情况下: -

long l = (long)12213213213;

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

Java不会考虑您只对值进行的操作。 例如,如果您有一个太大的值,那么将它分配给double是没关系的,则将long值首先检查为有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM