是否每个在运行时初始化的数组都是动态的并且 在编译期间初始化的每个数组都是静态的?
例如:
int array[];
public main() {
array = new int[100];
}
编译器知道数组有多少元素,所以它可以在编译期间初始化它,对吧?还是我需要给每个 int 一个值,让它变成静态的? 像这样:
int array[3] { 1, 2, 3};
是否可以在 main() 函数之外定义一个数组应该有多少个元素? (不给每个 int 一个值)像这样:
int array[100];
public main() {
}
我正在编写一个小游戏,它必须运行得非常快。我读到动态数组需要更长的时间来处理,所以我想尝试使用静态数组,但我不确定数组何时变为静态或动态。
我搜索了许多不同的教程,但找不到答案。
感谢阅读。
最佳答案
动态和静态分配的区别是模糊的(这在某种程度上取决于语言的含义)。在最一般的意义上,静态分配意味着一些大小已经预先确定,可能是在编译时。
在 java 中,任何对象(包括数组)总是在运行时分配。这并不一定意味着它是动态的,从运行时无法更改的意义上说,它可能仍然是静态的。示例:
public class Test1 {
public final int[] array1 = new int[10];
public int[] array2 = new int[20];
public void setArray2Size(int size) {
array2 = new int[size];
}
}
array1 的大小为 10,并且无法在运行时更改。请注意 final 关键字。这使您可以仅分配一次“array1”成员。所以你不能给这个成员分配一个不同的数组。
现在,array2 不是最终的,因此您可以随时为它分配一个不同的数组,就像 setArray2Size() 方法一样。如果在初始赋值后没有赋值,array2 仍然是 static 因为它不能被改变(因为没有代码可以这样做),尽管通过声明改变它是允许的.
数组的具体实例一旦创建永远就不能调整大小(在 java 中没有语言元素来表示调整数组大小)。对于初学者来说有点难以掌握,但是像 array2 这样的变量 不是数组。它是对数组的引用。但是,您可以将 array2 持有的引用替换为对另一个数组的引用,如 setArray2Size() 方法中的 array2 所示。
关于Java - 静态和动态数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076294/