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

时间:2011-05-13 20:12:24

标签: java coding-style argument-passing

之间是否存在差异:

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

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

我不相信,但我很想知道。

11 个答案:

答案 0 :(得分:36)

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

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

similar question解决方法参数列表后的[]

答案 1 :(得分:5)

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

答案 2 :(得分:4)

他们只是两种写作风格

答案 3 :(得分:4)

两者完全相同。请参阅Java语言规范(JLS)以查看java中使用的语法。

String [] args或String args []将创建一个没有大小和名称args的数组(在内存中保留一个位置)。

Let us Consider:

String [] x;

putting the [] after the name. Why? because it avoids subtle problems like this:-

String x [] , y; //x[] is an array but y is a String
String [] x y ; //two arrays x[] and y[] both

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

不。与这两者没有区别。

请参阅this doc中的Declaring a Variable to Refer to an Array部分。从该文件

  

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

所以只需使用第二种风格。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

虽然两者都用于创建String类型的数组,但第二个更受欢迎,因为这样可以同时创建多个String数组... E.g String[] a,b; 在这里,您同时创建了两个String Arrays a和b。

然而

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

希望这澄清。

答案 9 :(得分:0)

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

public static void main(String... args)

来自Java Language specification

<块引用>

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

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

答案 10 :(得分:0)

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

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

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

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