Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Isn';t main(字符串参数[])是动态数组吗?_Java_Arrays - Fatal编程技术网

Java Isn';t main(字符串参数[])是动态数组吗?

Java Isn';t main(字符串参数[])是动态数组吗?,java,arrays,Java,Arrays,我知道在publicstaticvoidmain(stringargs[])args中,是一个存储命令行参数的数组。但是,由于命令行参数是在运行时传递的,所以数组args[]是动态数组吗?在Java中,我们知道ArrayList用于完成这类工作,那么一个简单的数组对象如何在运行时存储这些参数呢?为什么您认为args数组必须是动态的?java虚拟机只需调用main方法,并将命令行参数作为字符串数组传递。这背后再也没有“魔力”了 Java数组可以在运行时定义大小,而不仅仅是在编译时(与C堆栈分配的数

我知道在
publicstaticvoidmain(stringargs[])
args
中,是一个存储命令行参数的数组。但是,由于命令行参数是在运行时传递的,所以数组
args[]
是动态数组吗?在Java中,我们知道ArrayList用于完成这类工作,那么一个简单的数组对象如何在运行时存储这些参数呢?

为什么您认为args数组必须是动态的?java虚拟机只需调用main方法,并将命令行参数作为字符串数组传递。这背后再也没有“魔力”了

Java数组可以在运行时定义大小,而不仅仅是在编译时(与C堆栈分配的数组不同)。但是,数组的大小在创建后不能更改

在运行时创建数组是完全有效的。创建后无法更改大小,但:

    int argCount = 5;
    // ...
    String test[] = new String[argCount];

ArrayList
允许您在运行时增大和缩小基础列表的大小

每个数组的大小都是在运行时确定的。非动态的部分是数组创建后无法更改其大小,对于传递给
main

的数组也是如此,传递给每个函数的每个数组都是动态的,因为数组是动态的 从被叫人的预期来看是动态的。对于主语的特殊情况;那里 是一种称为globbing的机制,它由 操作系统运行以调用主函数(有时也称为
入口点)。但这是操作系统(和JVM)本身的一个功能。

定义“动态数组”。在Java中,数组大小不必是编译时常量。所有数组在Java中都是“动态”的,因为它们的大小不是它们类型的一部分……坦率地说,C也有运行时大小的数组,它们只是没有以任何方式公开它们的大小。@Griwes C89没有,除非您想调用
malloc
a数组的结果。@Griwes我指的是C中的堆栈分配数组,我已经把这一点说得更清楚了(希望)@delnan,我特别指的是
malloc
调用分配足够元素以形成数组的结果。