2013-05-01 31 views
2

我跑这个timer example,我从int改为i浮动,来测试我的机器的潜力:-):为什么Java调用我的长变量int?

//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 

它说:“整“,意思是一个长整数?但是不会长久适合9100,080,000呢? 2^63是9223372036854775808。任何提示赞赏谢谢!

+2

int是32位的数据类型,而长为64位的数据类型。 – Juvanis 2013-05-01 05:33:17

+0

@Aquillo - 啊好吧,会尝试,谢谢! – Coffee 2013-05-01 05:33:59

+0

耶!它现在有效!你们好棒! – Coffee 2013-05-01 05:38:45

回答

13

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

i < 9100080000L 

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

JLS section 3.10.1

字面的整数型的长,如果它与一个ASCII字母L或l(ELL)后缀;否则它是int类型的(§4.2.1)。

...

最大十进制字面int类型是2147483648(2 )。

从0到2147483647的所有小数文字可能出现在int文字可能出现的任何位置。

它是一个编译时间错误,如果一个十进制字面int类型的大于2147483648(2 ),或者如果十进制字面2147483648似乎比作为元负运算的操作数的任何地方的其他(§15.15 。4)。

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

+0

非常感谢Jon! – Coffee 2013-05-01 05:37:27

3

9100080000是一个常量整数常量,它超出范围。为了使之成为整型常量,所以这将是在范围内,可以追加Ll

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

加“L”到你的电话号码。 java中的默认数字是整数。对于(long i = 0; i < 91008000001; i ++){ Object obj = new Object(); }

+5

虽然'l'可以工作,但使用'L'是一个更好的主意,因为它更容易与'1'区分。 – 2013-05-01 05:36:41

1

您需要长时间设置9100080000。

实施例:

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