【问题标题】:Unable to initialize Boolean array using long value in java? [duplicate]无法在 java 中使用长值初始化布尔数组? [复制]
【发布时间】:2017-03-21 17:15:34
【问题描述】:

我要做的是初始化布尔数组,数组的大小是长值。

public static  List<Integer> primesUpTo(long target) {

         boolean[] nonPrime = new boolean[target];

}

我收到以下错误:

possible loss of precision
         boolean[] nonPrime = new boolean[target];
                                          ^
  required: int
  found:    long

有人可以解释一下为什么我无法使用长值初始化布尔数组,而且我无法增加长值说:boolean[] nonPrime = new boolean[target+1] 也不起作用。谢谢提前.

【问题讨论】:

  • 读取错误 - 数组只能使用 int 值声明。如果您可以保证 target 将适合 int 然后将其转换。否则你可能会耗尽内存。
  • 数组总是用int初始化。您不能使数组大于Integer.MAX_VALUE

标签: java arrays oop boolean long-integer


【解决方案1】:

这是语言限制。

Java 因不支持超过 2^31−1(约 21 亿)个元素的数组而受到批评。[17][18][19]这是语言的限制; Java 语言规范第 10.4 节指出:

数组必须由 int 值索引...尝试访问具有长索引值的数组组件会导致编译时错误。[20]

https://en.m.wikipedia.org/wiki/Criticism_of_Java#Large_arrays

在这里找到答案:Do Java arrays have a maximum size?

【讨论】:

  • 感谢分享信息。我很欣赏你提供信息的方法。我想知道给予否定标记的人宁愿尝试回答问题。
猜你喜欢
  • 2016-12-27
  • 2019-01-16
  • 2023-03-06
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多