为什么只有String [] args在java而不是Object [] args?

时间:2013-11-26 03:23:21

标签: java command-line-arguments command-prompt

在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

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

要从控制台调用java程序,它将类似于:

c:\java MyProgram 123

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

答案 2 :(得分:2)

每当您从Console阅读时,默认情况下String就是String[] array的原因。

如果您使用:

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

字符串变量str by contains String,因为br.ReadLine()为您提供字符串

答案 3 :(得分:1)

因为您无法通过命令行参数传递对象。相反,将传递的参数解释为Strings

是很自然的

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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