java - 为什么 String[] args 没有像其他字符串数组一样进行初始化?

标签 java arrays string command-line-arguments

我正在学习 Java,我想知道 String args[](main's argument) 是如何工作的。对于方法中定义的其他字符串数组,需要使用固定维度进行初始化才能使用。

例如,要在字符串中输入 10 个或更少的元素,我需要输入 String a = new String[10];

但是,如果我只是输入 String a;,然后输入 a[0] = "Word;",我会得到一个“变量 a 可能不会已初始化”错误。

但是,对于 String args[],​​我不需要输入 String[] args = new args[]。为什么会这样呢?另外,是否可以创建一个像 String args[] 这样无限大小的字符串? (抱歉,如果我没说清楚)

最佳答案

For other string arrays defined in a method, they need to be initialized with a fixed dimension for them to be used.

嗯,这就是 main 方法的 String... 参数发生的情况。它使用您作为命令行参数传递的固定数量的参数进行初始化。但之后,您无法向数组添加任何内容,因为大小现已固定。如果不传递任何参数,其长度将为 0

请注意,参数类型实际上是可变参数,而不是 String[],尽管在​​内部前者无论如何都会转换为后者。使用 varargs 的好处是,您可以传递可变数量的参数,而无需显式创建数组。

Also, is it possible to create a string with infinite size like String args[]?

不,数组的大小不是无限的。由于 args.length 的类型是 int。逻辑上元素的最大数量可以是2 ^ 32 - 1。但实际上并非如此。内存可能会在此之前溢出。

另请注意,由于我们讨论的是方法形参,因此仍然存在最大方法大小的限制。根据 JVM,方法的最大大小限制为 65536 字节。

例如:

public static void test(String... names) {
    System.out.println("Names array length: " + names.length); 
    names[names.length] = "xyz";  // This would fail as expected.

    names = new String[10];   // this however you can do. Re-assign a new array to names 
}

public static void main(String... args) {
    test("a", "b", "c");  // pass 3 arguments
    test("a", "b");       // pass 2 arguments
}

关于java - 为什么 String[] args 没有像其他字符串数组一样进行初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135967/

相关文章:

java - 实现接口(interface)时出现错误 "Cannot reduce the visibility of a inherited method"

java - 如何使用 spring boot websocket 发送二进制文件?

c - 不能有返回值

c - 数组和指针的区别

java - 以金字塔形式打印字符串

java - 在java中将double解包为字符串

java - NEHE 第 06 课在 LWJGL 中损坏,我应该使用什么来代替 org.lwjgl.devil.IL?

java - 如何找到给定时间的时差

python - 当我使用 np.savetxt 时,为什么我的数组空间不正确

python - python 中的正则表达式匹配以换行符分隔的字符串