繁体   English   中英

与varargs和字符串数组混淆

[英]confusion with varargs and string arrays

 class CmndLineArguments {

  public static void main(String[] args) {
    int length = args.length;
    if (length <= 0) {
    System.out.println("You need to enter some arguments.");
    }
   for (int i = 0; i < length; i++) {
    System.out.println(args[i]);
   }
   }
   }

command : java CmndLineArguments Mahendra zero one two three
output:
Mahendra
zero
one
two
three

该代码如何工作? 我们使用的是String []参数,因此我们不应该传递新的String [] {.....} ..之类的参数吗?

然后这种形式和String ... s形式之间的区别/优点是什么...因为varargs用于在String [] args中传递零个或多个参数,我们也可以在没有零用户输入的情况下运行它(或Java默认会提供一些参数吗?)

主要方法很特殊。 它是由JRE而不是命令行调用的。 JRE整理参数并将它们作为数组提供给main方法。 此变量位于var args之前,与它们无关。

该代码如何工作? 我们使用的是String []参数,因此我们不应该传递新的String [] {.....} ..之类的参数吗?

JVM创建所有输入的数组,并将传递给您的main方法。 这仅适用于main方法,因为它是应用程序的起点,并且该方法由JVM调用

然后这种形式和String ... s形式之间的区别/优点是什么...因为varargs用于在String [] args中传递零个或多个参数,我们也可以在没有零用户输入的情况下运行它(或Java默认会提供一些参数吗?

varargs允许您为任何方法采用多个参数。 如果您不使用varargs,那么创建参数数组并将其传递给接受参数数组的方法是您的代码工作。

主要方法很特殊,String []表示法是经典的方法,但如今我经常看到String ...表示法。 实际上,我认为使用varargs更为简洁,因为您知道在命令行中没有固定的数字或参数。

我不知道JVM是否将参数转换为字符串数组或字符串varargs,但是结果是相同的。

所以我们不应该传递像new String [] {.....} ..这样的参数吗?

你不能。 声明该数组后,您将从哪里将其传递给main方法? 没有。

公共静态void main(String [] args)

那是程序的起点,而jvm从命令行中选择那些args。

来自main的官方文档

数组中的每个字符串都称为命令行参数。 命令行参数使用户无需重新编译即可影响应用程序的操作。 例如,排序程序可能允许用户使用以下命令行参数指定数据以降序排序:

以及args... args之间的区别

公共静态无效someMethod(String [] args)**

当您将args传递到此处时,调用方应声明一个数组,并将数组对象传递到此处。

公共静态无效someMethod(String ... args)

在这里,您不知道传递参数的数量,也不允许方法调用者传递多个String对象。

这是关于Varargas的官方文档

最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。 Varargs只能在最终参数位置使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM