Java - 静态和动态数组初始化

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)

我正在编写一个小游戏,它必须运行得非常快.我读动态数组需要更长的时间来处理,所以我想尝试使用静态数组,但我不确定数组何时变为静态或动态.我在许多不同的教程中搜索,但我找不到答案.
谢谢阅读.

Dur*_*dal 7

动态和静态分配的区别是不明确的(它在某种程度上取决于语言的含义).在最一般意义上,静态分配意味着某些大小已经预先确定,可能在编译时.

在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所示.