是否真的在运行时初始化的每个数组都是动态的
在编译期间初始化的每个数组都是静态的?
例如:
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];
}
}
arrayFixed的大小为10,并且在运行时无法更改.请注意最终的关键字.这使您只能分配“array1”成员一次.因此,您无法为此成员分配不同的数组.
现在array2不是final,所以你可以在任何时候给它分配一个不同的数组,比如setArray2Size() – 方法.如果在初始赋值之后没有赋值,则array2在它无法更改的意义上仍然是静态的(因为没有代码可以这样做),尽管通过声明更改它是允许的.
一旦创建了数组的具体实例就无法调整大小(没有语言元素来表示在java中调整数组的大小).初学者有点难以理解,但像array2这样的变量不是数组.它是对数组的引用.但是,您可以将array2保存的引用替换为对另一个数组的引用,如setArray2Size() – 方法中的array2所示.
标签:java,arrays,initialization,static,dynamic
来源: https://codeday.me/bug/20190725/1534788.html