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

Posted

技术标签:

【中文标题】main(String args[]) 和 main(String[] args) 之间有区别吗?【英文标题】:Is there a difference between main(String args[]) and main(String[] args)? 【发布时间】:2011-08-25 05:31:46 【问题描述】:

有没有区别:

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

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

我不相信,但我想知道。

【问题讨论】:

如你所说,编码风格。我知道很多人更喜欢第二种,因为argsString 的数组而不是args 的数组 【参考方案1】:

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

由于String[]在Java中作为一个整体是对象的类型,所以不拆开会更加一致清晰。

similar question 在方法参数列表之后寻址 []

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

两者完全一样。请参阅 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; 在这里,您同时创建了两个字符串数组 a 和 b。

然而

String a[],b; 将创建字符串数组“a”和字符串变量(不是数组)b

希望这可以澄清。

【讨论】:

【参考方案5】:

它们只是两种写作风格

【讨论】:

【参考方案6】:

方法签名相同,所以没有区别。

它是一个公共方法,它什么都不返回,方法名称是“main”,它需要一个字符串数组。

【讨论】:

【参考方案7】:

不。两者没有区别。

参见this doc 中的Declaring a Variable to Refer to an Array 部分。从那个文档

float anArrayOfFloats[]; // 这个表格 不鼓励

所以只需使用第二种样式。

【讨论】:

【参考方案8】:

它们之间的区别在于,当我们尝试使用静态语法从一个类手动调用主方法到另一个类时,我们使用“string[] s”。此时,我们必须在 main 方法中传递一个字符串类型的数组作为参数。当我们使用 "String... s" 时,不需要传递任何字符串数组作为参数。它会运行,不管你是否将数组作为参数传递(如果你没有显式传递它,它会自行传递)...... 因此证明了/////////

【讨论】:

【参考方案9】:

除了这两种样式,值得一提的是,以下也是Java 5以来main()方法的有效签名:

public static void main(String... args)

来自Java Language specification:

方法 main 必须声明为 public、static 和 void。它必须指定一个声明类型为字符串数组的形式参数(第 8.4.1 节)。

省略号 ... 是 var-args 的语法,可用于将任意数量的参数传递给方法。更多信息here。

【讨论】:

【参考方案10】:

String args[] 和 String[] args 是相同的。从某种意义上说,他们做同样的事情,创建一个名为 args 的字符串数组。

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

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

前者创建了两个字符串数组fruitsvegetables,而后者创建了一个fruits的String数组和一个蔬菜

【讨论】:

【参考方案11】:

有一个区别: 例如 如果你写 int[] arr; - 这里 arr 是对整数数组的引用 而在 int arr[] 的情况下; - arr 是一个原始的 int 类型数组

【讨论】:

以上是关于main(String args[]) 和 main(String[] args) 之间有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

public static void main(String[] args) 和 public static void main(String args[]) 的区别? [复制]

public static void main(String[] args)说明

在哪些情况下我们可以使用 public static void main(String... args) 而不是 public static void main(String[] args)

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

main()里面为什么要放String[] args

解读main()方法中的String[] args