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

时间:2013-05-01 05:31:26

标签: java types for-loop

我正在运行此timer example,我将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 个答案:

答案 0 :(得分:13)

变量不是int - 它是你正在比较它的文字。你只需要:

i < 9100080000L

编译器不使用“你正在用文字做什么”作为确定文字的类型的过程的一部分,也不改变基于文字的文字类型价值(与C#不同,其中9100080000隐式输入为long,因为它对于int来说太大了。

来自JLS section 3.10.1

  

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

     

...

     

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

     

从0到2147483647的所有小数文字都可能出现在可能出现int literal的任何地方。

     

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

请注意,虽然Ll都有效,但我总是建议使用L来表示清晰度 - 否则它看起来非常像1,具体取决于你的字体。

答案 1 :(得分:3)

9100080000是一个常规整数常量,它超出范围。要使其成为 long 整数常量,因此它将在范围内,您可以追加Ll

    for(long i=0;  i< 9100080000L; i++){

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您需要将9100080000设置为long。

示例:

for (long i = 0; i < 9100080000L; i++)
{
  // do something - note the 9100080000L
}