为啥 java 中只有 String[] args 而不是 Object[] args?

Posted

技术标签:

【中文标题】为啥 java 中只有 String[] args 而不是 Object[] args?【英文标题】:Why only String[] args in java instead of Object[] args?为什么 java 中只有 String[] args 而不是 Object[] args? 【发布时间】:2013-12-11 01:19:24 【问题描述】:

在java中,根据Java Language Specification 12.1.4,main方法应该声明如下:

public static void main(String[] args)
     //code of program

通过使用String[] args,我们可以获得命令行参数。有时需要将这些命令行参数转换为适当的类型。假设如果您提供了任何数字 123 作为参数,并且您想将其转换为 int,那么我们可以使用以下转换方法之一:

int n1=Integer.valueOf(args[0]);
//or
int n2=Integer.parseInt(args[0]);

但是,如果 java 可以提供使用 Objects[] args 而不是 String[] args,那么我们可以轻松地从一种类型转换为另一种类型,例如,转换如下:

public static void main(Object[] args)
     int n1=(Integer)args[0];

我不明白为什么 java 使用 String[] args 而不是 Object[] args

【问题讨论】:

简单。如何通过命令行传递对象? 命令行提供字符串。你如何区分字符串和整数?仅仅作为一个数值不足以将其视为整数。 Ravi - 超越我们目前所做工作的界限思考是件好事。仅供参考 - Powershell/.NET/C#/Cmdlets 实际上可以做这样的事情msdn.microsoft.com/en-us/library/ms714395%28v=vs.85%29.aspxcrazorsharp.blogspot.com/2009/12/… 【参考方案1】:

Java 的设计考虑到了可移植性,因此 Java 程序可以被不同的操作环境调用。让环境将 Java 对象传递给 main 会对调用者系统施加过多的限制,因为该系统的任务是“理解”输入并将其转换为 Java 对象。

另一方面,字符串是通用的:所有操作环境都有它们。因此,Java 规范需要字符串,因为知道您的 Java 程序能够比外部环境更好地处理和理解它们。

【讨论】:

【参考方案2】:

这很简单,因为args 来自外部 java 环境,它来自操作系统,因此它不能创建 Java 对象,它只能传递字符串

要从控制台调用 java 程序,应该是这样的:

c:\java MyProgram 123

Java 无法知道操作系统正在传递一个对象,它只是一个字符串。

【讨论】:

【参考方案3】:

每当您从Console 阅读时,默认情况下都是String,这就是他们将其设为String[] array 的原因。

如果你使用:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter String");
String str = br.readLine();

字符串变量str 包含字符串,因为br.ReadLine() 为您提供字符串

【讨论】:

【参考方案4】:

因为您不能通过命令行参数传递对象。相反,很自然地将传递的参数解释为Strings

【讨论】:

【参考方案5】:

public static void main(String[] args)是执行Class文件$java MyClass input1 input2时运行的main方法。

【讨论】:

【参考方案6】:

因为操作系统不会将变量类型的参数传递给 JVM。如果您有Object[] args,那么没有操作系统,JVM 就无法真正推断出它们的类型。这也是“标准”(例如祖先的 C/C++)Main function 的一般合同(当然是在 Java 中)。

【讨论】:

【参考方案7】:

可能是因为“String”是一个字符序列数组,它占用连续的内存,可以使用标准键盘输入。否则 main 方法将如何处理类型转换。

【讨论】:

以上是关于为啥 java 中只有 String[] args 而不是 Object[] args?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的java程序明明开启了4条线程,却只有一条线程在运行?

java中这段代码为啥报错啊

关于java,String类,输出结果是啥?为啥?

为啥必须将 `String[] args` 作为 main() 参数?

为啥只有字符串视图?

public static void main(String[] args) - 为啥它实际上是静态的? [复制]