我正在学习 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/