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

标签 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() {
}

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

最佳答案

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

在 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/

相关文章:

java - 打印格式化数组

java - 按 4 的余数对数组进行排序

c++ - 用另一个新语句重置动态数组,需要先删除吗?

java - java 重载的奇怪行为

java - 如何使用 AWS CDK for Java 为账户创建 IAM 委托(delegate)人?

java - 如何在远程 RC 服务器上启动 Selenium htmlSuite?

java - 使用 Azure 目录进行身份验证并从数据库中获取有效的用户角色

java - Tomcat启动后调用构造函数

javascript - 数组中指定的if语句条件

ios - 使用具有通用 setter 和 ARC 的 Objective-C 动态属性