如果它是一个Object并存储在堆上,为什么要在Java中指定Array的大小?

时间:2017-01-29 05:35:02

标签: java arrays

我来自C ++背景,我刚开始学习java。我无法理解为什么在编译之前我需要提供数组的大小,即使它是一个对象并存储在堆上?

欢迎任何可以帮助我理清概念的例子。

2 个答案:

答案 0 :(得分:0)

如果你创建一个数组

int[] ia = new int[0];

以后无法更改它的大小,因此如果您尝试添加值,则会出现超出范围的异常。如果这对你的程序不起作用,你应该使用一个ArrayList,它是一个没有定义大小的对象,所以虽然这个代码应该可行但是很糟糕:

ArrayList<Integer> al = new ArrayList<Integer>();
for(int q = 0; q < 10000; q++){ //Infinitely add ints to the ArrayList
   int i = 1;
   al.add((Integer) i);
}

答案 1 :(得分:0)

  

我无法理解为什么在编译之前需要提供数组的大小...

编译前无需提供大小。例如,以下代码允许用户在运行时提供大小:

final Scanner input = new Scanner(System.in);
System.out.print("Array size: ");
final int[] array = new int[input.nextInt()];
System.out.printf("The array size is %d.\n", array.length);

如果您想要一个易于调整大小的数组对象,ArrayLists非常好。