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

时间:2013-04-18 06:49:10

标签: java arrays dynamic static initialization

在运行时初始化的每个数组都是动态的,这是真的吗? 在编译期间初始化的每个数组都是静态的吗?

例如:

int array[];                 
public main() {      
    array = new int[100];    
}

编译器知道数组有多少元素,因此它可以在编译期间启动它?或者我需要给每个int一个值,使它变为静态? 像这样:

int array[3] { 1, 2, 3};              

是否可以定义一个数组在main()函数之外应该有多少个元素? (没有给每个int一个值)像这样:

int array[100];      
public main() {
}

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

3 个答案:

答案 0 :(得分: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];
    }
}

arrayFixed的大小为10,并且在运行时无法更改。请注意 final 关键字。这使您只能分配“array1”成员一次。因此,您无法为此成员分配不同的数组。

现在array2不是final,所以你可以在任何时候给它分配一个不同的数组,比如setArray2Size() - 方法。如果在初始赋值之后没有赋值,则array2仍然是 static ,因为它无法更改(因为没有代码可以这样做),尽管通过声明更改它是允许的。 / p>

一旦创建了一个具体的数组实例 ever (没有语言元素来表示在java中调整数组的大小)。初学者有点难以理解,但像array2 这样的变量不是数组。它是数组的引用。但是可以将array2保存的引用替换为对另一个数组的引用,如setArray2Size() - method中的array2所示。

答案 1 :(得分:1)

declaration时未分配内存。

例如:int array[100];; - 不会compiles

仅在遇到new运算符memory时才会分配。

所以

array = new int[100];;编译。

答案 2 :(得分:0)

是的,数组的大小仅在编译时才知道,但内存的分配将在运行时发生。 直到遇到“新”内存才会被分配给数组。