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

为什么命令行参数在Java中作为字符串数组传递?,java,command-line-arguments,main,Java,Command Line Arguments,Main,在Java中,命令行参数作为字符串数组传递到我的程序中,如下所示: public static void main(String[] args ) { } 为什么要使用数组而不是单个字符串 我认为,如果命令行参数作为单个字符串传入,并让我的程序根据我的需要使用它,那么它将更加灵活/适应性更强。使用字符串数组而不是单个字符串是否有任何设计优势 C程序员熟悉这种格式 绿色团队决定以这种方式传递参数 将命令行与元素分离取决于平台,并且(我认为)由shell完成。因此,将命令行作为字符串数组传递可以创

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

public static void main(String[] args ) { }
为什么要使用数组而不是单个字符串

我认为,如果命令行参数作为单个字符串传入,并让我的程序根据我的需要使用它,那么它将更加灵活/适应性更强。使用字符串数组而不是单个字符串是否有任何设计优势

  • C程序员熟悉这种格式

  • 绿色团队决定以这种方式传递参数

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

  • 为什么要使用数组

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

    ,而不是一根字符串


    <>这是因为<代码> hello > />代码>代码> World < /Cord>(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,则运行时系统将空格字符解释为命令行参数的分隔符,并且此程序的输出为

    User's 1st Name:James & Last Name is:Gosling
    
    现在,如果命令行参数作为字符串而不是字符串数组传递,那么用户将如何在程序中传递多个参数字符串数组允许用户传递多个参数,而不是字符串。但是,如果要将多个字符串作为单个参数传递,该怎么办?答案是:您可以使用双引号(系统使用双引号)将它们连接起来,如“这是一个单参数”

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

    每个Unix程序,不管用什么语言编写,都会收到一个字符串参数数组。自从Unix在1970年被创建以来就一直是这样。早在Windows甚至MS-DOS存在之前


    其他一些回答说,“……因为C是这样做的。”这与C是这样做的非常接近:C是这样做的,因为C是Unix最早、最受欢迎的编程语言



    *Linux也是。Linux不是Unix,因为“Unix”是一个昂贵的商标,但Linux力求尽可能接近Unix。

    C遗留下来的:它传统上采用指向字符指针的指针。我认为这个选项允许用户要么传入多个值,要么按照您的建议执行并解析单个字符串。对任何一方都没有好处。基于意见的;投票关闭。事实上,如果您真的想使用单个字符串,您可以使用
    JavaMyProg“一个短字符串”
    ,并通过
    args[0]
    访问该字符串:)老实说,我真的看不到任何好处。如果你坚持的话,你可以把字符串附加在一起。使用数组更灵活,例如处理和解析选项。拥有一个字符串并自己从中提取选项会更灵活,不是吗?你可以看看,这很有意义。没想到会有这么多好的答案,但我只能接受其中一个:-)谢谢!