2

我正在运行这个计时器示例,并且我i从 int 更改为 float,以测试我的机器潜力 :-):

    //measuring elapsed time using System.nanoTime
    long startTime = System.nanoTime();
    for(long i=0;  i< 9100080000; i++){
        Object obj = new Object();
    }
    long elapsedTime = System.nanoTime() - startTime;

但是java抱怨说:

1 error found:
File: C:\Users\Adel\Code\Javas\MeasureTimeExampleJava.java  [line: 16]
Error: integer number too large: 9100080000

它说“整数”,意思是长整数?但它不会长期适合 9,100,080,000 吗?2^63 是 9223372036854775808 。任何提示表示感谢!

4

4 回答 4

13

这不是变量,而是您要与之比较int文字。您只需:

i < 9100080000L

编译器不会使用“你对文字所做的事情”作为确定文字类型的过程的一部分,也不会根据值更改文字的类型(与 C# 不同,其中9100080000隐式键入为,long因为它对于 ) 来说太大了int

JLS 部分 3.10.1

如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则它是 long 类型;否则它是 int 类型(§4.2.1)。

...

int 类型的最大十进制文字是 2147483648 (2 31 )。

从 0 到 2147483647 的所有十进制文字都可能出现在可能出现 int 文字的任何位置。

如果 int 类型的十进制文字大于 2147483648 (2 31 ),或者如果十进制文字 2147483648 出现在除一元减号运算符的操作数之外的任何位置(第 15.15.4 节),则会出现编译时错误。

请注意,虽然两者都可以L工作,但为了清楚起见l,我总是建议使用Linstead - 否则它看起来很像 a ,1具体取决于您的字体。

于 2013-05-01T05:34:13.507 回答
3

9100080000是一个常规整数常量,它超出了范围。要使其成为整型常量,使其在范围内,您可以附加Ll

    for(long i=0;  i< 9100080000L; i++){
于 2013-05-01T05:34:25.083 回答
1

将“l”添加到您的号码。java中的默认数字是整数。for(long i=0; i< 9100800000l; i++){ Object obj = new Object(); }

于 2013-05-01T05:34:41.260 回答
1

您需要将 9100080000 设置为 long。

例子:

for (long i = 0; i < 9100080000L; i++)
{
  // do something - note the 9100080000L
}
于 2013-05-01T05:39:59.287 回答