为什么Java调用我的long变量为int?

Cof*_*fee 2 java types for-loop

我正在运行这个计时器示例,我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;
Run Code Online (Sandbox Code Playgroud)

但是java抱怨说:

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

它是说"整数",意味着一个长整数?但不会长期适应9,100,080,000吗?2 ^ 63是9223372036854775808.任何提示赞赏谢谢!

Jon*_*eet 13

这不是变量这是一个int-它的字面你与它比较.您只需要:

i < 9100080000L
Run Code Online (Sandbox Code Playgroud)

编译器不使用"你正在用文字做什么"作为确定文字类型的过程的一部分,也不会根据值改变文字的类型(与C#不同,9100080000它将隐含地键入long因为它太大了a 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节)的操作数之外的任何地方,则为编译时错误.

请注意,同时兼具Ll工作,我总是建议使用L,而不是为了清晰-否则它看起来非常像一个1取决于你的字体.