Jeb*_*eto 3 java arrays static initialization dynamic
是否真的在运行时初始化的每个数组都是动态的,并且在编译期间初始化的每个数组都是静态的?
例如:
int array[];
public main() {
array = new int[100];
}
Run Code Online (Sandbox Code Playgroud)
编译器知道数组有多少元素,因此它可以在编译期间启动它?或者我需要给每个int一个值,使它变为静态?像这样:
int array[3] { 1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
并且可以定义一个数组在main()函数之外应该有多少元素?(没有给每个int一个值)这样:
int array[100];
public main() {
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个小游戏,它必须运行得非常快.我读动态数组需要更长的时间来处理,所以我想尝试使用静态数组,但我不确定数组何时变为静态或动态.我在许多不同的教程中搜索,但我找不到答案.
谢谢阅读.
动态和静态分配的区别是不明确的(它在某种程度上取决于语言的含义).在最一般意义上,静态分配意味着某些大小已经预先确定,可能在编译时.
在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];
}
}
Run Code Online (Sandbox Code Playgroud)
arrayFixed的大小为10,并且在运行时无法更改.请注意最终的关键字.这使您只能分配"array1"成员一次.因此,您无法为此成员分配不同的数组.
现在array2不是final,所以你可以在任何时候给它分配一个不同的数组,比如setArray2Size() - 方法.如果在初始赋值之后没有赋值,则array2 在它无法更改的意义上仍然是静态的(因为没有代码可以这样做),尽管通过声明更改它是允许的.
阵列的一个具体实例不能被调整过一次创建(没有语言的元素来表达调整Java中的数组).初学者有点难以理解,但像array2这样的变量不是数组.它的一个参考到所述阵列.但是,您可以将array2保存的引用替换为对另一个数组的引用,如setArray2Size() - 方法中的array2所示.