【问题标题】:Why are command line arguments passed as a String array in Java?为什么命令行参数在 Java 中作为字符串数组传递?
【发布时间】:2015-07-19 08:14:26
【问题描述】:

在 Java 中,命令行参数作为字符串数组传递到我的程序中,如下所示:

public static void main(String[] args ) { }

为什么它使用一个数组,而不是一个字符串?

我认为如果命令行参数作为单个字符串传入,它会更加灵活/适应性强,并让我的程序做我想做的事。使用 String 数组而不是单个 String 是否有任何设计优势?

【问题讨论】:

  • 从 C 中遗留下来的:它传统上采用指向字符指针的指针。我认为此选项允许用户传入多个值或按照您的建议执行并解析单个字符串。对任何一方都没有优势。基于意见;投票结束。
  • 其实你可以java myProg "A short string",如果你真的想使用单个字符串,可以通过args[0]访问字符串:)
  • 老实说,我真的看不出任何优势。如果您真的坚持,您可以随时将您的字符串附加在一起。
  • 使用数组更灵活,例如处理和解析选项。拥有一个字符串并自己从中提取选项会更灵活,不是吗?

标签: java command-line-arguments main


【解决方案1】:

为什么要使用数组

当程序启动时,它们会被传递一个 C 字符串数组,这是对该输入的自然且最简单的转换。

,而不是单个字符串?

这是因为helloworld(2 个字)和hello world(1 个字)之间存在差异

【讨论】:

    【解决方案2】:
    1. C 程序员熟悉这种格式。

    2. 绿色团队决定以这种方式传递参数。

    3. 将命令行与元素分开取决于平台,并且(我认为)由 shell 完成。因此,将命令行作为字符串数组传递允许创建可移植的跨平台代码。

    【讨论】:

      【解决方案3】:

      真正的原因是因为Unix就是这样做的。*

      每个 Unix 程序,不管它是用什么语言编写的,都会接收一个字符串参数数组。自 1970 年左右创建 Unix 以来,情况就一直如此。早在 Windows 甚至 MS-DOS 出现之前。


      其他一些答案说,“......因为 C 就是这样做的。”这非常接近同一件事:C 之所以这样做,是因为 C 是 Unix 最原始、最受欢迎的编程语言。


      *Linux 也是如此。 Linux 不是 Unix,因为“Unix”是一个要花很多钱的商标,但 Linux 力求尽可能接近 Unix。

      【讨论】:

      • 有道理。没想到有这么多好的答案,但我只能接受其中一个:-) 谢谢!
      【解决方案4】:

      让我们考虑下面的程序

      public static void main(String[] commandLineArguments) {
              int argumentLength = commandLineArguments.length;
              if (argumentLength == 2) {
                  System.out.println("User's 1st Name:" + commandLineArguments[0]
                          + " Last Name :" + commandLineArguments[1]);
              } else {
                  System.out.println("User's only entered 1st name :"
                          + commandLineArguments[0]);
              }
          }
      

      如果用户输入 James Gosling,运行时系统会将空格字符解释为命令行参数的分隔符,并且该程序的输出为

      User's 1st Name:James & Last Name is:Gosling
      

      现在如果命令行参数作为字符串而不是字符串数组传递,那么用户将如何在程序中传递多个参数? 字符串数组允许用户传递多个参数而不是字符串。但是,如果您想将多个字符串作为单个参数传递怎么办?答案是:你可以用双引号(系统使用)加入它们,比如 "This is a single argument"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 2020-03-09
        相关资源
        最近更新 更多