3

我有一个关于在 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;

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

你怎么看?为什么会这样,有什么特别的原因?

提前致谢。

4

2 回答 2

7

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

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

尝试类似的东西: -

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

你会更好理解。

就情况float而言: -

float f = (float)45.45;

该值45.45是一个double值,并且适合 的大小double。所以,编译器不会有问题,然后它会执行一个castto float

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

确切地。编译器首先在此处检查有效值int,然后才能通过强制转换操作进一步移动。

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

long l = (long)12213213213;

您不会因为cast操作而出错,而是因为您numeric literal无法表示为int. 因此,编译器没有在那里获得有效值来执行强制转换操作。

于 2013-01-31T18:46:45.947 回答
4

Java doesn't consider what you do with a value only what it is. For example if you have a long value which is too large it doesn't matter that you assign it to a double, the long value is checked as valid first.

于 2013-01-31T18:57:38.823 回答