Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果数组是对象并存储在堆上,为什么要在Java中指定数组的大小? 我来自C++背景,我刚刚开始学习java。我无法理解为什么在编译之前需要提供数组的大小,即使它是一个对象并且存储在堆上_Java_Arrays - Fatal编程技术网

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

如果数组是对象并存储在堆上,为什么要在Java中指定数组的大小? 我来自C++背景,我刚刚开始学习java。我无法理解为什么在编译之前需要提供数组的大小,即使它是一个对象并且存储在堆上,java,arrays,Java,Arrays,欢迎任何有助于我理清概念的示例。如果您创建了一个数组 int[] ia = new int[0]; 它的大小以后无法更改,因此如果尝试添加值,则会出现越界异常。如果这对您的程序不起作用,您应该使用ArrayList,它是一个没有定义大小的对象,因此在执行此代码时: ArrayList<Integer> al = new ArrayList<Integer>(); for(int q = 0; q < 10000; q++){ //Infinitely add in

欢迎任何有助于我理清概念的示例。

如果您创建了一个数组

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);
}
ArrayList al=new ArrayList();
对于(int q=0;q<10000;q++){//无限地将int添加到ArrayList
int i=1;
加上((整数)i);
}
如果创建数组

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);
}
ArrayList al=new ArrayList();
对于(int q=0;q<10000;q++){//无限地将int添加到ArrayList
int i=1;
加上((整数)i);
}
我不明白为什么我需要在编译之前提供数组的大小

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

最终扫描仪输入=新扫描仪(System.in);
系统输出打印(“数组大小:”);
final int[]数组=新int[input.nextInt()];
System.out.printf(“数组大小为%d.\n”,array.length);
如果你想要一个易于调整大小的数组状的对象,你会觉得很好

我不明白为什么我需要在编译之前提供数组的大小

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

最终扫描仪输入=新扫描仪(System.in);
系统输出打印(“数组大小:”);
final int[]数组=新int[input.nextInt()];
System.out.printf(“数组大小为%d.\n”,array.length);

如果您想要一个易于调整大小的类似数组的对象,可以选择非常好的方法。

您不必总是指定大小。始终可以使用初始值设定项列表:
int[]nums=newint[]{1,2,3}不清楚您到底在问什么。在C++中堆上创建数组时,还需要指定其大小;在这方面,C++和java没有区别。也许一点代码可以让您更清楚地了解您的要求。@LoganKulinski,它指定了一个大小数组3@Manav您可能正在寻找<代码> ARAYLISTAB/CODE>。@ C++中的MANAV,您必须选择将数组存储在堆栈上或堆上(在两种情况下,您需要指定分配的大小)。您谈论的不是数组,而是使用(并重新分配)底层数组的更高级数据结构(向量)。Java也有这些属性-
ArrayList
是最接近的一个。您不必总是指定大小。始终可以使用初始值设定项列表:
int[]nums=newint[]{1,2,3}不清楚您到底在问什么。在C++中堆上创建数组时,还需要指定其大小;在这方面,C++和java没有区别。也许一点代码可以让您更清楚地了解您的要求。@LoganKulinski,它指定了一个大小数组3@Manav您可能正在寻找<代码> ARAYLISTAB/CODE>。@ C++中的MANAV,您必须选择将数组存储在堆栈上或堆上(在两种情况下,您需要指定分配的大小)。您谈论的不是数组,而是使用(并重新分配)底层数组的更高级数据结构(向量)。Java也有这些-
ArrayList
是最接近的一个