【问题标题】:Why this code showing error in my netbeans?为什么此代码在我的 netbeans 中显示错误?
【发布时间】:2015-10-16 15:02:04
【问题描述】:

我在课堂上使用此代码。但它显示了错误。为什么我们不能在字符串数组声明中分配长值?它显示了可能的损失转换。

long n=10000000;
String ar[]=new String[n];

【问题讨论】:

标签: java arrays string


【解决方案1】:

这是正确的声明。使用int 而不是long。 Java JVM 不允许创建大小范围为long 数据类型的数组,因此它会在编译时产生警告(错误)。

int n=10000000;
String ar[]=new String[n];

我尝试了以下代码:

public class Array {
  public static void main(String args[]) {
    int a[] = new int[Integer.MAX_VALUE];
  }
}

得到以下异常:Requested array size exceeds VM limit

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    at gen2dArray.main(Array.java:7)

【讨论】:

  • 为什么我不能分配长值。如果我的 n 值非常大,比如 long 值。然后我需要在字符串数组中分配长值。但它不会接受。
  • @Ram 我认为它会抛出 OutOfMemoryError: 错误。看看这个:Do Java arrays have a maximum size?.
  • 它不会抛出任何异常。我无法运行它。因为在输入它时在 netbeans 和 eclipse 中也显示错误。
  • @Ram 因为编译器会提前警告您。即使您创建了一个 Integer.MAX_VALUE 数组,也不会警告您,但会在运行时失败。
  • @Ram Java 语言规范禁止您使用long 声明数组的大小
【解决方案2】:

这个问题可能和这个一样

create an array of long

与内存分配有关。 但是我们可以使用多维数组来处理。

字符串的最大整数数组将占用大量内存。

如果您需要使用大数组,请尝试使用 HashMap。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2020-12-14
    • 2022-01-06
    相关资源
    最近更新 更多