2013-05-01 30 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 
}