2013-11-24 49 views
10

有誰能告訴我爲什麼我不能聲明這樣的數組?在java中聲明long []數組

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435, 
       174251, 698027, 2794155, 11180715, 44731051, 178940587, 
       715795115, 2863245995, 11453115051, 45812722347, 183251413675, 
       733006703275, 2932028910251, 11728119835307, 46912487729835, 
       187649967696555, 750599904340651, 3002399684471467}; 

編譯器說int類型的文字超出範圍。我也試圖將其轉換爲長這樣

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435, 
       174251, 698027, 2794155, 11180715, 44731051, 178940587, 
       715795115, (long)2863245995, (long)11453115051, (long)45812722347, etc ... 

,但什麼都沒有改變也嘗試過像成才這樣Long.valueOf(x)其中x爲數字whitch編譯器有問題。

任何想法?

預先感謝

+3

將L添加到您的數字中。 I.e:2863245995L等。 –

+0

謝謝你的作品完美。 – Yetti

+0

關鍵原則是Java表達式的類型和值獨立於它如何使用。 11453115051是一個超大的int字面值,無論後續的轉換或處於長[]初始值設定項中。 –

回答

23

平原數目被認爲是在Java int。追加L哪些大於Integer.MAX_VALUE轉換成long

long[] powers = {..., 2863245995L, 11453115051L, ...}; 

根據docs

字面一個整數是long類型的,如果它與ASCII 字母L或l(ELL)後綴;否則它是類型int

後綴L是優選的,因爲字母l(ell)通常很難與數字1(一)區分開來。

+0

謝謝,幫助。 – Yetti

+0

@Yetti,不客氣 – Masudul

+0

@Yetti你似乎是新來的。如果它能幫助你解決你的問題,不要忘了接受答案。 –

3

你有沒有試過類似的東西?

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435, 
      174251, 698027, 2794155, 11180715, 44731051, 178940587, 
      715795115L, 2863245995L, 11453115051L, 45812722347L, 183251413675L, 
      733006703275L, 2932028910251L, 11728119835307L, 46912487729835L, 
      187649967696555L, 750599904340651L, 3002399684471467L};