与varargs和字符串数组混淆

时间:2013-10-10 04:34:10

标签: java

 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 [] args,所以我们不应该像新String [] {.....}那样传递参数吗?

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

这段代码如何运作?我们正在使用String [] args,所以我们不是   应该传递像新String [] {.....} ..?

这样的参数

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

  

然后这个形式和之间有什么区别/优势   String ... s form ...因为varargs用于传递零或更多   String [] args中的参数也可以在没有零用户的情况下运行它   输入(或者java默认情况下会补充一些参数吗?

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

答案 2 :(得分:0)

主要方法是特殊的,String []符号是经典的,但我现在经常看到String ...符号。事实上,我认为它与varargs更简洁,因为,你知道,你在命令行中没有固定的数字或参数。

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

答案 3 :(得分:0)

  

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

不,你不能。声明该数组后,从哪里传递给main方法? NO。

  

public static void main(String [] args)

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

From official docs of main

  

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

args... args

之间的差异
  
    

public static void someMethod(String [] args)**

  

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

  
    

public static void someMethod(String ... args)

  

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

以下是Varargas

上的官方文档
  
    

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