为什么命令行参数在 Java 中作为字符串数组传递?

Why are command line arguments passed as a String array in Java?

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

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

为什么这里使用数组而不是单个字符串?

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

  1. C 程序员熟悉这种格式。

  2. 绿队决定这样传参。

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

Why does this use an array

程序启动时,系统会向它们传递一个 C 字符串数组,这是此输入的自然且最简单的翻译。

, and not a single String ?

这是因为hello world(2个字)和hello world(1个字)

是有区别的

让我们考虑下面的程序

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,运行时系统会将 space 字符解释为命令行参数的分隔符,此程序的输出为

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

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

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

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


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


*Linux 也是。 Linux 不是 Unix,因为 "Unix" 是一个花费很多钱的商标,但 Linux 努力尽可能接近 Unix。