2013-11-24 48 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};