main(String args[])和main(String[] args)之间有什么区别吗?

59

这两者之间有什么不同吗:

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

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

我不这样认为,但我很好奇。


3
正如您所说的,编码风格。我知道许多人更喜欢第二种方式,因为它似乎更清晰,即args是一个String数组,而不是一个args数组。 - josh.trow
11个回答

53

从含义上来说,它们是相同的。然而,在声明数组时,我建议使用后一种语法(String[] args)。前一种语法主要是为了与C语法兼容。

由于String[]作为一个整体是Java中对象的类型,因此不要将其拆分更加一致和清晰。

类似的问题解决了方法参数列表后面的[]


9

在Java中,使用类型后面的括号 (String[]) 没有任何区别,但这是更常见的做法。


8

它们两个完全相同。请参考 Java 语言规范 (JLS) 查看 Java 中使用的语法。

String[] argsString args[] 将创建一个数组(在内存中预留了一些空间),该数组没有大小,名称为 args

让我们考虑:

String [] x;

[]放在名称后面可以避免出现这样的微妙问题:
String x [] , y; //x[] is an array but y is a String
String [] x y ; //two arrays x[] and y[] both

4
尽管两者都用于创建String类型的数组,但第二种更受欢迎,因为您可以同时创建多个String数组...例如:String[] a,b; 在这里,您已经同时创建了两个String数组a和b。
然而,String a[],b;将会创建一个名为"a"的String数组和一个名为"b"的String变量(不是数组)
希望这样能够澄清。

2

不需要

它们只是两种写作风格


1

方法签名相同,因此没有区别。

这是一个公共方法,不返回任何内容,方法名称为“main”,它接受一个字符串数组。


0

不是的。这两者之间没有区别。

请参阅this doc中的声明变量以引用数组部分。从该文档中可以看到:

float anArrayOfFloats[]; // 不建议使用这种形式

因此,只需使用第二种样式即可。


0
这两者的区别在于,当我们使用静态语法从一个类手动调用主方法时,我们使用"string[] s"。此时我们必须将字符串类型的数组作为参数传递给主方法。而当我们使用"String... s"时,则不需要传递任何字符串数组作为参数。它会运行,无论您是否将数组作为参数传递(如果您不显式传递它,它会自动传递)... 因此证明/////////

0

String args[] 和 String[] args 是相同的。它们的作用是创建一个名为 args 的字符串数组。

但为了避免混淆并确保与您可能遇到的所有其他 Java 代码兼容,建议在声明数组时使用语法 (String[] args)。

您可能会遇到的一个困惑是当您尝试在一行中声明多个 String 数组时, String[] fruits, vegetables 不同于 String fruits[], vegetables

前者创建两个字符串数组 fruitsvegetables,而后者创建了一个名为 fruits 的字符串数组和一个名为 vegetables 的字符串变量。


0
除了这两种风格之外,值得一提的是自Java 5以来,以下也是main()方法的有效签名:
public static void main(String... args)

来自Java语言规范

方法main必须声明为public、static和void。它必须指定一个形式参数(§8.4.1),其声明类型是String数组。

省略号...是可变参数的语法,可用于将任意数量的参数传递给方法。更多信息在此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接